سؤال

ولدي بعض المشاكل في وضع المعادلات ن خطي في matlab.I لا أعرف كيف يمكن أن أصرح في matlab.I إلى رمز MATLAB لوضع المعادلات الخطية ن ..

هل كانت مفيدة؟

المحلول

ويمكنك كتابة المعادلات ن الخطية كما معادلة مصفوفة واحدة لحلها. هنا يمكنك أن تجد مثال عظيم: HTTP: //blogs.mathworks كوم / اختيار / 2007/09/13 / ماتلاب الأساسيات الفيديو وحل الخطية، المعادلات / (فيديو)!

وانظر أيضا هذه الصفحات:
http://en.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation

نصائح أخرى

ويمكنك حل النظام الخطي بطرق مختلفة، اعتمادا على ما إذا كان يوجد حلا فريدا أم لا.

وهناك طريقة بسيطة هي بتخفيضه إلى شكل انخفاض-القيادة (rref).

وأطلع على النظام:

 x + 5y = 4
2x -  y = 1

يمكنك كتابة معامل المصفوفة A، وRHS، B كما يلي: (' هي المشغل تبديل)

>> A = [1 5; 2 -1]

A =

     1     5
     2    -1

>> B = [4 1]'

B =

     4
     1

ويمكنك كتابة على أنها مصفوفة ممتدة (A | B):

>> horzcat(A,B)

ans =

     1     5     4
     2    -1     1

وثم العثور على REF (A | B)

>> rref(ans)

ans =

    1.0000         0    0.8182
         0    1.0000    0.6364

وبالتالي س ~ 0،8182، ص ~ 0.6364.

وهذا تماما أسرع طريقة لحل المعادلات الخطية في MATLAB هي ببساطة لإعداد المعادلة على شكل

AX = B

وثم حل من قبل

X = A\B

ويمكنك إصدار

help mldivide

وللعثور على مزيد من المعلومات حول تقسيم المصفوفة وما القيود لديه.

ومدونة لطريقة تكرارية Guase زايدل تول هو خطأ التسامح X0 هو تخمين الأول لحل


 function seidel(A,b,x0,tol,itmax)
%Solve the system  Ax=b using the Gauss-Seidel iteration method.
clc
% =======================================================
% Programmer : A. Ziaee mehr
%

help seidel
n=length(b);
x=zeros(n,1);
%fprintf('\n')
disp('The augumented matrix is = ')
Augm=[A b]
Y=zeros(n,1);
Y=x0;   
for  k=1:itmax +1
    for ii=1:n
        S=0;
        for jj=1:ii-1
            S=S+A(ii,jj)*x(jj);
        end
        for jj=ii+1:n
            S=S+A(ii,jj)*x0(jj);
        end
        if (A(ii,ii)==0)
            break
        end
        x(ii)=(-S+b(ii))/A(ii,ii);
    end
    err=abs(norm(x-x0));
    rerr=err/(norm(x)+eps);
    x0=x;
    Y=[Y x];
    if(rerr<tol)
        break;
    end
end
% Print the results
if (A(ii,ii)==0)
    disp('division by zero')
elseif (k==itmax+1)
    disp('No convergence')
else
    %fprintf('\n')
    disp('The solution vector are : ')
    fprintf('\n')
    disp('iter    0       1            2          3           4    ... ');
    fprintf('\n')
    for ii=1:n
        fprintf('%1.0f= ',ii);
        fprintf('%10.6f ',Y(ii,1:k+1));
        fprintf('\n')
    end
    fprintf('\n')
    disp(['The method converges after ',num2str(k),' iterations to'])
    x
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top