主题:求助超越方程组的解法
小妮妮1
[专家分:0] 发布于 2007-07-18 09:42:00
请问各位高手,下面的这个超越方程组能否用matlab求解,用什么函数解?其中sx1和sx2是未知数。
sx1=qs/(2*sqrt(qs^2+4*js*sx1+je*sx2)*tanh(sqrt(qs^2+4*js*sx1+je*sx2)/(2*k*t))
sx2=q/(2*sqrt(q^2+4*sx2+2*je*sx1)*tanh(sqrt(q^2+4*sx2+2*je*sx1)/(2*k*t))
回复列表 (共20个回复)
11 楼
小妮妮1 [专家分:0] 发布于 2007-08-24 17:55:00
怎么没人理我呢,请高手帮忙看看,现在课题全卡住了,急急!!!
12 楼
kaien [专家分:20] 发布于 2007-08-24 18:27:00
首先请确定你的方程组书写正确,注意不要漏括号。
然后,你可以使用fsolve求解方程组。
具体用法建议参考2楼的书写形式。不要照抄,好好核对一下你的求解方程组的书写。
MFILE中输入的参数是sx,输出参数是F。注意应该使用sx(1)和sx(2),不要和sx1和sx2混淆书写。
fslove可以调用格式: [x,fval,exitflag] = fsolve(@myfun,x0)
选定初始点x0时你可以使用你文献中的解来验证。
exitflag=1时正确求解。为负值时求解失败。
13 楼
niuys [专家分:50] 发布于 2007-08-24 19:07:00
小妮妮你好!
我路过此论坛,偶见你发帖求助,为写论文而急急
所以顺便帮你求解了,供你参考。
希望对你能有帮助。
求解过程如下。(由于你的问题中参数没有具体给出,我假设了一组数据)
MFILE的文件名可以定为myfun.m。
具体内容如下:
function F = myfun(sx)
%以下是6个参数的设定,你根据你问题要求调换。
qs=1;
js=1;
je=1;
k=1;
t=1;
q=1;
%以下是返回结果
F = [qs/(2*sqrt(qs^2+4*js*sx(1)+je*sx(2))*tanh(sqrt(qs^2+4*js*sx(1)+je*sx(2))/(2*k*t)))-sx(1); q/(2*sqrt(q^2+4*sx(2)+2*je*sx(1))*tanh(sqrt(q^2+4*sx(2)+2*je*sx(1))/(2*k*t)))-sx(2)];
在matlab中的运行命令:
%设定初始值
x0=[0 1];
%调用fsolve函数求解超越方程组
[x,fval,falg]=fsolve(@myfun,x0)
求解结果如下:
Optimization terminated: first-order optimality is less than options.TolFun.
x =
0.4105 0.3788
fval =
1.0e-006 *
0.6236
0.4589
falg =
1
祝你论文成功。
14 楼
小妮妮1 [专家分:0] 发布于 2007-08-25 10:46:00
我用文献上的解作为初值,画出来的图形和文献上不同,有时exitflag为负值,下附我的代码,请高手帮忙看看,太着急了!!其中sx1,sx2,tc为未知数
主程序:
clear all;clc;close all;
global js;
global q;
Tc =[];
Sx1=[];
Sx2=[];
%q_par = [0.9];
%q_par = [1.065];
q_par = [2.0];
js_par = 2.0:-0.01:0;
n0= [unifrnd(0,0.5) unifrnd(0,0.5) 1.8];
for q = q_par
js = js_par(1);
options=optimset('display','on');
[n(1,:),fval,exitflag]=fsolve(@myfun,n0,options)
for i = 2:length(js_par)
js = js_par(i);
[n(i,:),fval,exitflag]=fsolve(@myfun,n(i-1,:),options)
end
Tc = [Tc n(:,3)]
Sx1=[Sx1 n(:,1)]
Sx2=[Sx2 n(:,2)]
end
plot(Tc,js_par)
str =[];
for i=1:length(q_par)
str = strvcat(str,num2str(q_par(i)));
end
legend(str,4);
xlabel('Tc/Ja')
ylabel('Js/Ja')
下面是函数,和我给出的函数有些差别
function y=myfun(n)
global js
global q
syms tc sx1 sx2
je=1.0;
qs=2.0;
k=1.0;
sx1=n(1);
sx2=n(2);
tc=n(3);
w31=sqrt(qs^2+4*js*qs*sx1+je*q*sx2);
w32=sqrt(q^2+4*q*sx2+je*qs*sx1+je*qs*sx1);
y(1)=qs/(2*w31)*tanh(w31/(2*k*tc))-sx1;
y(2)=q/(2*w32)*tanh(w32/(2*k*tc))-sx2;
N=[2*w31*coth(w31/(2*k*tc))-4*js, -je, 0;
-je, 2*w32*coth(w32/(2*k*tc))-4, -je;
0, -je, 2*w31*coth(w31/(2*k*tc))-4*js];
y(3)=det(N);
15 楼
小妮妮1 [专家分:0] 发布于 2007-08-29 09:34:00
怎么没有人帮忙呢,呜呜!!
16 楼
小妮妮1 [专家分:0] 发布于 2007-09-02 09:47:00
怎么没有人帮忙呢
17 楼
vfdff [专家分:740] 发布于 2007-09-02 11:03:00
solve 和 fsolve 有什么区别呢 ?
18 楼
vfdff [专家分:740] 发布于 2007-09-02 11:15:00
Function F = myfun(sx)
F = [qs/(2*sqrt(qs^2+4*js*sx1+je*sx2)*tanh(sqrt(qs^2+4*js*sx1+je*sx2)/(2*k*t)))-sx(1);
q/(2*sqrt(q^2+4*sx2+2*je*sx1)*tanh(sqrt(q^2+4*sx2+2*je*sx1)/(2*k*t)))-sx(2)];
难道这样 就是说两个方程联立的 ?
19 楼
小妮妮1 [专家分:0] 发布于 2007-09-03 09:33:00
对于上面的表达形式,你看看matlab教程就清楚了
20 楼
vfdff [专家分:740] 发布于 2007-09-03 23:40:00
呵呵
你的意思就是正确了?
我来回复