求解元胞数组中的方程

发布于 2024-12-27 09:51:08 字数 238 浏览 2 评论 0原文

我在像这样的元胞数组中有一些线性方程(方程的数量每次都不同):

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

如何用 Matlab 求解这些方程? 我可以简单地通过这个函数得到我的答案:

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

但是,由于方程的数量每次都不同,我希望这可以自动完成。

I have some linear equations in a cell array like this ( The number of equations vary each time ) :

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赠意 2025-01-03 09:51:08

我假设您希望方程等于 0,并且方程中不出现等号。

解析表达式以找到系数 - 放入矩阵 (A)。
我在这里使用了一个近乎技巧,假设变量始终为 x1x2 等。此外,您还必须为乘法编写 * 符号。 FindCoeffs 函数通过将 1 和 0 分配给变量来查找系数。
然后,您可以使用 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

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
七月上 2025-01-03 09:51:08

您可以使用以下方法求解存储在元胞数组中的方程:

solve(equs{:})

也适用于未知数(如果 symvar 无法正确确定它们):

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

You can solve equation stored in a cell array by using:

solve(equs{:})

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

uvar={x,y}
solve(equs{:},uvar{:})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文