在 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
您的已知常量 Tau
和 Roh
未替换的地方,您最终在方程式中得到 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 非常聪明,可以为您定义类型。当您求解方程式时,它会检测需要哪些变量。零分配是为了加速。
我想求解一个有两个方程和两个变量的系统。
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
您的已知常量Tau
和Roh
未替换的地方,您最终在方程式中得到 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 非常聪明,可以为您定义类型。当您求解方程式时,它会检测需要哪些变量。零分配是为了加速。