在 for 循环中求解具有两个方程和两个变量的系统

Solving a system with two equations and two variables in a for loop

我想求解一个有两个方程和两个变量的系统。
Tau(i)Roh(i)是输入数组。

Tau=[0.91411 0.91433 0.91389 0.91399 0.91511 0.915]
Roh=[0.07941 0.07942 0.07952 0.07946 0.07951 0.07947]

我想为每个 i 步骤(for 循环)计算 R(i)t(i)。 我很乐意帮助您解决方程式。

Tau(i)-((1-R(i))^2*t(i))/(1-R(i)^2*t(i)^2)==0
Roh(i)-R(i)-((1-R(i))^2*R(i)*t(i)^2)/(1-R(i)^2*t(i)^2)==0

我试过以下脚本,但我很难编写正确的代码来导出数据。我只得到 "sym" 这不是一个值。

function [R,t] = glassair(Tau, Roh)

for i=1:6
    syms R(i) t(i)
     eq1(i)=sym('Tau(i)-((1-R(i))^2*t(i))/(1-R(i)^2*t(i)^2)');
     eq2(i)=sym('Roh(i)-R(i)-((1-R(i))^2*R(i)*t(i)^2)/(1-R(i)^2*t(i)^2)');
     sol(i)=solve(eq1(i),R(i), eq2(i),t(i));

end
end

您的代码存在多个问题。

  • 使用带有变量的 R(i) 语法,您混合了符号函数。我认为这里你只有变量。与 eq(i) 相同,这创建了一个符号函数,而不是你的方程列表(正如你可能想要的那样)
  • 你用错误的参数顺序调用了 solve
  • 你用错误的参数顺序调用了 solve
  • 将字符串传递给 sym 您的已知常量 TauRoh 未替换的地方,您最终在方程式中得到 4 个未知数

.

Tau=[0.91411 0.91433 0.91389 0.91399 0.91511 0.915]
Roh=[0.07941 0.07942 0.07952 0.07946 0.07951 0.07947]

syms R t
for i=1:6
eq1=Tau(i)-((1-R)^2*t)/(1-R^2*t^2);
eq2=Roh(i)-R-((1-R)^2*R*t^2)/(1-R^2*t^2);
sol=solve([eq1,eq2]);
allsol(i).R=double(sol.R);
allsol(i).t=double(sol.t);
end

您只需定义一次函数,然后使用 for 循环获取值。

function [R_out,t_out] = glassair(Tau_in, Roh_in)

syms R t Tau Roh
eq1 = Tau-((1-R)^2*t)/(1-R^2*t^2);
eq2 = Roh-R-((1-R)^2*R*t^2)/(1-R^2*t^2);

R_out = zeros(1,6); % Given it will be always 6
t_out = zeros(1,6);

for i=1:6
    Tau = Tau_in(i);
    Roh = Roh_in(i);
    sol = solve( subs( [eq1;eq2] ) );
    R_out(i) = double(sol.R);
    t_out(i) = double(sol.t);
end

end

Matlab 非常聪明,可以为您定义类型。当您求解方程式时,它会检测需要哪些变量。零分配是为了加速。