Matlab求解方程

想寻求一个matlab代码,关于解方程的

img

方程中a即为X,CMOD和P是通过EXCEL导入的,最后需要导出一个EXCEL,关于不同CMOD和P对应的X的EXCEL

大致写了一下,思路没错,我循环将不同CMOD和P值的结果存储在一个矩阵中,你可以把excel测试数据提供给我

syms X cmod p y
eq1 = (X+2)*y == 2271.875*cmod/p;
eq2 = y == 0.76 - 2.28*a/b + 3.85*(a/b)^2 - 20.04*(a/b)^3 + 0.66/(1-(a/b)^2);
b = 75;

[a, y] = solve([eq1, eq2], [X, y]);

cmod_values = [1, 2, 3];
p_values = [4, 5, 6];
result_matrix = zeros(length(cmod_values), length(p_values));
for i = 1:length(cmod_values)
    for j = 1:length(p_values)
        cmod_val = cmod_values(i);
        p_val = p_values(j);

        y_val = double(subs(y, [cmod, p], [cmod_val, p_val]));
        a_val = double(subs(a, [y, b], [y_val, b]));
        result_matrix(i, j) = a_val;
    end
end

filename = 'result_matrix.xlsx';
writematrix(result_matrix, filename);


http://nb.sosol.com.cn/nb/2023/0222/56005.html这个网页也许能帮助您

可以借鉴下

Matlab可以使用solve函数求解代数方程。例如,要解决方程x^2 - 3x + 2 = 0,可以按照以下方式进行:

复制
syms x
eqn = x^2 - 3*x + 2 == 0;
sol = solve(eqn,x);
这将给出一个解向量sol,其中包含方程的解。在这种情况下,解为x = 1x = 2。注意,在使用solve函数之前,必须先声明变量为符号变量,使用syms命令。

如果你有多个方程,可以将它们作为一个向量传递给solve函数。例如,要解决方程组x + y = 32x - y = 0,可以按照以下方式进行:

复制
syms x y
eqn1 = x + y == 3;
eqn2 = 2*x - y == 0;
sol = solve([eqn1, eqn2], [x, y]);
这将给出一个解向量sol,其中包含方程组的解。在这种情况下,解为x = 1y = 2

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

在Matlab中,可以使用以下方式求解方程:

  1. 直接使用方程表达式求解:
    例如:
matlab
>> x = (3*y - 2*z) / (y - z)
x =  (3*y - 2*z) / (y - z)

  1. 使用模仿人求解:
    例如:
matlab 
>> y = 5; 
>> z = 3;
>> x = (3*y - 2*z) / (y - z)
x = 
    10

  1. 使用syms工具符号求解:
    例如:
matlab
>> syms x y z
>> eqn = (3*y - 2*z) == (y - z)*x
>> solve(eqn,x)
ans =
   x = (3*y - 2*z)/(y - z)  

  1. 使用fsolve函数迭代求解:
    例如:
matlab
>> f = @(x) (3*5 - 2*3) - (5 - 3)*x
>> fsolve(f,0)
ans =
   10

  1. 使用 MATLAB 的符号工具包(Symbolic Math Toolbox)里的 solve 进行方程组的求解:
    例如:
matlab
>> syms x y z
>> eq1 = (3*y - 2*z) == (y - z)*x; 
>> eq2 = x^2 + y^2 == 10;
>> [x,y] = solve(eq1, eq2, [x,y]);  
     x = 2*sqrt(5)  
     y = 0

以上是Matlab中常用的几种方程求解方法,希望能帮助您解决问题。