24小时热门版块排行榜    

查看: 692  |  回复: 5

ldoop

铁杆木虫 (著名写手)


[求助] 高手们,请帮忙解一个三元方程组啊,谢谢了

b*x -a -b-sqrt((b*x-a-b)^2-4*ab)=b_0*x_0 -a_0 -b_0-sqrt((b_0*x_0-a_0-b_0)^2-4*a_0*b_0
b*x -a -b+sqrt((b*x-a-b)^2-4ab)=b0*x0 -a0 -b0+sqrt((b0*x0-a0-b_0)^2-4*a_0*b_0
x*b/(a+b+2*sqrt(a*b))=b_0*x_0/(a_0+b_0+2*sqrt(a_0*b_0))

其中a_0,b_0,x_0为已知常数,求未知数 a b x

[ Last edited by ldoop on 2013-5-17 at 23:42 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
fegg7502: 金币+2, 应助指数+1, 鼓励交流 2013-05-18 14:43:15
ldoop: 金币+10, 有帮助, 谢谢回复,我是想求得解析解而非数值解,不过还是感谢了,麻烦帮忙研究下是否能求得解析解 2013-05-20 16:26:21
MATLAB程序,复制进一个m文件,F5运行即可,根据自己的需要输入已知参数,即返回相应的解:

function solvenole314
clear all;clc
format long
global a_0 b_0 x_0

a_0=input('请输入已知常数a_0=');
b_0=input('请输入已知常数b_0=');
x_0=input('请输入已知常数x_0=');

aint=input('请输入未知数a的猜想值=');
bint=input('请输入未知数b的猜想值=');
xint=input('请输入未知数x的猜想值=');

options=optimset('TolFun',1e-9,'MaxIter',1000);
x1=fsolve(@fun299792,[aint bint xint],options)



%--------------------------------
function y=fun299792(z)
global a_0 b_0 x_0
a=z(1);
b=z(2);
x=z(3);
y(1)=b*x-a-b-sqrt((b*x-a-b)^2-4*a*b)-(b_0*x_0-a_0-b_0-sqrt((b_0*x_0-a_0-b_0)^2-4*a_0*b_0));
y(2)=b*x-a-b+sqrt((b*x-a-b)^2-4*a*b)-(b_0*x_0-a_0-b_0+sqrt((b_0*x_0-a_0-b_0)^2-4*a_0*b_0));
y(3)=x*b/(a+b+2*sqrt(a*b))-(b_0*x_0/(a_0+b_0+2*sqrt(a_0*b_0)));
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2013-05-18 09:43:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

★ ★ ★
ldoop(fegg7502代发): 金币+3, 鼓励交流 2013-05-18 14:46:48
一个计算的例子如附件。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 附图1.jpg
  • 2013-05-18 09:47:31, 52.57 K
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2013-05-18 09:47:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
ben_ladeng: 金币+2, 欢迎常来 2013-05-19 23:09:22
ldoop: 金币+10, 有帮助, 谢谢回复,我是想求得解析解而非数值解,不过还是感谢了,麻烦帮忙研究下是否能求得解析解 2013-05-20 17:02:46
你这是非线性方程组,最好用Newton法求解。设 三个函数
f1=b*x -a -b-sqrt((b*x-a-b)^2-4*ab)-b_0*x_0 +a_0 +b_0+sqrt((b_0*x_0-a_0-b_0)^2+4*a_0*b_0
f2=b*x -a -b+sqrt((b*x-a-b)^2-4ab)-b0*x0 +a0 +b0-sqrt((b0*x0-a0-b_0)^2+4*a_0*b_3=0
f3=x*b/(a+b+2*sqrt(a*b))-b_0*x_0/(a_0+b_0+2*sqrt(a_0*b_0))
记3X3矩阵
A=∂(f1,f2,f3)/∂(x,a,b)
let dX=(dx,da,db), F=(f1,f2,f3)
解出
dX = -inverse(A) F
然后迭代
x=x+dx
a=a+da
b=b+db
当然,你要给迭代初值。你这里涉及到sqrt函数,所以给初值要小心。应该有经验。
上面是一般方法。实现需要编程。主要的工作是求解3X3的逆矩阵。
4楼2013-05-19 07:30:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ldoop

铁杆木虫 (著名写手)


我用MATHEMATICA 也没有解析出来,但是根据一些数值求解,我推算出来解析解是 a=b_0,  b=a_0, x=x_0*b_0/a_0
5楼2013-05-20 17:05:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖


csgt0: 金币+1, 欢迎交流 2013-05-21 15:36:49
引用回帖:
5楼: Originally posted by ldoop at 2013-05-20 17:05:40
我用MATHEMATICA 也没有解析出来,但是根据一些数值求解,我推算出来解析解是 a=b_0,  b=a_0, x=x_0*b_0/a_0

不要迷恋解析解。实际中遇到的绝大多数方程都没有解析解。从实用观点出发,只要能解就好,没有解析解也没有关系。解析解如果太复杂,也没有什么意义。20多年前,我的一个同事给我一个解析解,用maple做的,解的表达式写了7页纸。从计算速度、简明性上和精度上说,都不如数值解。另外,三元线性方程是有公式解,但也是很复杂。还要判断根的情况。我看都不如newton法。一招制敌。会了这个,基本不需要其他。一隅之见,希望有帮助。
6楼2013-05-21 07:03:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ldoop 的主题更新
信息提示
请填处理意见