用2010a版本matlab的solve函数解方程,方程系数随给定变化,用的num2str()实现系数传递,但是换成方程组就不行了。而我的主要目的还是想解变系数的方程组,现在是假设给定系数传递到方程组中加以验证两段程序如下:解一个未知量的方程程序:
nw=2;
d=17;
x1=4;
z1=3;
syms u real
u1=solve(['(',num2str(nw),'^2*',num2str(d),'^2+',num2str(nw),'^2*u^2-u^2)*(',num2str(x1),'-u)^2-(',num2str(z1),'*u)^2=0'],'u')
运行结果和直接将系数代入是一样的,说明正确。
而如果换成下面方程组就出问题了,程序如下:
syms k u
clc;
clear;
nw=2;
ng=1;
d=17;
x1=4;
z1=3;
h=1;
[k,u]=solve(['',num2str(nw),'^2/',num2str(ng),'^2+',num2str(h),'^2/',num2str(ng),'^2*(k-u)^2-',num2str(z1),'^2/((',num2str(x1),'-k)^2)-1=0','(',num2str(ng),'^2*(',num2str(d),'^2+u^2)-u^2)*(k-u)^2-(',num2str(h),'*u)^2=0'],'k','u')
运行结果:
arning: 1 equations in 2 variables. New variables might be introduced.
Warning: Could not extract individual solutions. Returning a MuPAD set
object.
> In solve>assignOutputs at 104
In solve at 87
In Untitled2 at 23
k =
solvelib::Union({matrix([[z1], [x]]) | z1 in RootOf(z^4 - z^3*(2*x + 8) + z^2*(16*x + 2*x^2 + 19) - z*(32*x + 16*x^2 + 24) + 32*x^2 + 39, z)}, x, R_)
u =
[]
而我如果直接将系数代入方程组却是有结果的如下
[u,k]=solve('4+1/(k-u)^2-9/(4-k)^2-1=0','((17^2+u^2)-u^2)*(k-u)^2-u^2=0','u','k')
u =
4.7984129169991595687249419320395
3.401503416769899328935248503063
4.7157135906116105117222193261033
3.453751018098001328107450582844
k =
5.0983137243116070417702508027919
3.6140973803180180369937015345044
4.4537295022442988166265404746531
3.2618759615370012543237033282415
所以想把系数通过参数传递到方程组的方式没法实现,看过论坛里也有类似的情况,不过用num2str()来实现变系数的没发现。请高人指教,或者用其他方法能实现将变化的系数传递到方程组也行。