24小时热门版块排行榜    

查看: 3416  |  回复: 26
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

自己的歌

银虫 (初入文坛)

[求助] 求助:非线性方程组的求解(郁闷中) 已有10人参与

各位大侠好,本人工科出身,数学功底实在一般。最近自编一个计算程序,涉及到一个非线性方程组的求解,无奈解法不理想,很多时候不收敛,求大侠指导一二。

方程形式:方程组中的每个方程的形式都是这样的,x + A = f1(x) + f2(x) ,其中f(x)的形式为 f(x) = (x+ B) / ln (x + C)
其中A,B,C为常数。

解法:采用不动点迭代法,即假设一组初值,带入方程的右边,从而得到一组新的值。如误差值大于允许误差,采用加权因子的方式获得新的迭代值,加权因子从0.1到0.625已尝试过多个。

问题:有时迭代过程中变量计算值超过边界条件。例如x的允许范围为8<= x <=12 , 迭代过程中x会超过12或小于8,会导致计算出错。因此我限定如果x超过12,则等于12;小于8,则等于8。但是没有效果,最后x值总是一直超过12就是小于8。费解。

Help:各位大侠对于这个不动点解法,有没有优化的方法,或者有没有其它可行的解法?谢谢先!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cobrasq

金虫 (小有名气)

【答案】应助回帖

这是有约束非线性方程组优化问题,自变量的范围形成一个线性约束。利用内点罚函数算法(MATLAB优化工具箱自带)。

以下是如何求数值解。注意,为了简化,让优化工具箱自行计算方程组的数值一阶微分(雅可比矩阵)和二阶微分(Hessian矩阵)。如果结果不理想,可以先调节 options 中的参数。如果还不理想,可以利用符号运算工具箱求出雅可比矩阵和 Hessian 矩阵。

1. 建立一个函数文件 func1.m

function y=obj_func(x)
% x 为列向量
%常量
A=0.8;
B1=0.1;
C1=0.4;
B2=0.2;
C2=0.5;

%临时变量
f1 = (x+ B1)./ln(x + C1);
f2 = (x+B2)./ln(x+C2);
temp_y = x + A - f1 - f2;

%目标方程为每项方程的平方和
y = 0.5*sum(temp_y.^2);

2. 建立一个主程序 solve_6_unknowns.m

%清屏,清工作区
clc
clear all

%设置优化算法参数
maxiter = 20000;
maxfuneval = length(x0)*maxiter;
options = optimset('Display‘, ’off',...
    ‘Algorithm', 'interior-point',...
    'GradObj', 'off',...
    'GradConstr', 'off',...
    'Hessian', 'off',...
    'TolX', 1e-6,...
    'TolFun', 1e-6,...
    'MaxIter', maxiter,...
    'MaxFunEvals', maxfuneval);

%设置初始值
x0 = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]';

%设置边界
lb = [8, 8, 8, 8, 8, 8]';
ub = [12, 12, 12, 12, 12, 12]';

%调用优化函数
[x, fval, exitflag, output] = fmincon(@obj_func, x0, ...
    [], [], ...
    [], [], ...
    lb, ub, ...
    [], options);

%显示结果
disp(['Iterations: ',num2str(output.iterations)])
disp(['Func Evals: ', num2str(output.funcCount)])
disp(['Algorithm: ',output.algorithm])
disp(['exit flag = ',num2str(exitflag)])
disp(['error = ( ',num2str(fval','%-15.6e'),' )'])
disp(['x1 = ( ',num2str(x(1),'%-15.6f'),' )'])
disp(['x2 = ( ',num2str(x(2),'%-15.6f'),' )'])
disp(['x3 = ( ',num2str(x(3),'%-15.6f'),' )'])
disp(['x4 = ( ',num2str(x(4),'%-15.6f'),' )'])
disp(['x5 = ( ',num2str(x(5),'%-15.6f'),' )'])
disp(['x6 = ( ',num2str(x(6),'%-15.6f'),' )'])
27楼2014-01-08 23:50:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 27 个回答

jerkwin

专家顾问 (正式写手)

【答案】应助回帖

★
感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-12-26 09:04:08
要用优化法来做, 不要直接解
2楼2013-12-22 22:11:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★
感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-12-26 09:04:16
具体方程和数据都给出来看看。
3楼2013-12-22 22:16:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

onesupeng

金虫 (职业作家)

【答案】应助回帖

★
感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-12-26 09:04:22
不动点收敛的条件看看,是不是不能用不动点。公式太长我就不写了。

可以采用牛顿迭代这一类的

另外,也可以采用对分法,比较慢,但是有时候很管用
长期招收博士生,参见http://fsl-unsw.com
4楼2013-12-23 08:47:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 申请科研项目纯靠实力能成功吗? 200+7 David1982 2026-10-13 11/550 2026-10-15 10:30 by zyqchem
[职场人生] 40+中年人失业后,还能找到好工作吗? +5 xqy2009 2026-10-13 5/250 2026-10-15 09:49 by 淘淘塑物性通
[硕博家园] 极限拉扯,如何抉择 +11 Isak0320 2026-10-12 15/750 2026-10-14 21:55 by 猫鱼不是鱼
[论文投稿] 二审4个多月了还是Awaiting Reviewer Scores 10+3 纳斯达克ML 2026-10-11 4/200 2026-10-14 17:30 by babero
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +8 wangyl_123 2026-10-10 13/650 2026-10-14 15:12 by zuesli
[教师之家] 课题组会帮你通过考核么? +4 好运来~9527 2026-10-10 7/350 2026-10-13 08:41 by xli1984
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见