English 中文(简体)
电池阵列中的排他性方程式
原标题:Solving equations in a cell array

我在这样的囚室中有一些线性方程式(每小时等数有所不同):

equs = {  2*X1+X2+6 ,  3*X2-X1  }

How can I solve these equation with Matlab? I can get my answer simply by this function :

ans = solve(equs(1), equs(2));

But, as the number of equations differ each time, I want this to be done automatically.

问题回答

I am assuming that you want the equations to be equal to 0, and that no equals sign appears in the equations.

Parse the expressions to find the coefficients - put into a matrix (A). I am using here a near trick that assumes that the variables are always x1, x2, etc. Also you must write the * sign for multiplications. The FindCoeffs function finds the coefficients by assigning ones and zeros to the variables. Then, you can solve the equations using linsolve.

 function FindEquations() 

     a = { x1+x2 - 6  , x1 - x2 - 2 };
     A = [];
     B = [];
     for i=1:numel(a)
        [b,l] = FindCoeefs(a{i}, numel(a));
        A(end+1,:) = l;
        B(end+1) = -b;
    end
    linsolve(A,transpose(B))
end

function [b,p] = FindCoeefs(expr, n)
    for j=1:n
        eval(sprintf( x%d=0; ,j));
    end
    b = eval([expr  ; ]);

    p = zeros(1,n);
    for i=1:n
        for j=1:n
            eval(sprintf( x%d=0; ,j));
        end
        eval(sprintf( x%d=1; ,i));

        p(i) = eval([expr  ; ]) - b;    
    end

end

可以通过使用:

solve(equs{:})

Works for the unknown, too (in case they are not properly determined by symvar):

uvar={x,y}
solve(equs{:},uvar{:})




相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签