24小时热门版块排行榜    

查看: 3304  |  回复: 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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 找导师 +5 yuanjiabao 2026-08-29 6/300 2026-08-30 11:52 by zhouyanli11
[公派出国] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +6 ASdOkHsho7FD 2026-08-28 8/400 2026-08-30 11:32 by l0VvVHGBGRLv
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +6 ASdOkHsho7FD 2026-08-28 9/450 2026-08-30 11:30 by l0VvVHGBGRLv
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +5 ASdOkHsho7FD 2026-08-28 6/300 2026-08-30 11:18 by l0VvVHGBGRLv
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-30 10:33 by winsaint
[基金申请] 29号明天会评吗 +3 笨笨唐 2026-08-28 3/150 2026-08-30 09:29 by cww8181
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 jCd0dEvKHShX 2026-08-29 5/250 2026-08-30 08:33 by ZPa0EcMwuECS
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 G6APbkg8SA6w 2026-08-29 4/200 2026-08-30 07:17 by ZPa0EcMwuECS
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +4 gy1nBQXYQJqL 2026-08-29 5/250 2026-08-30 06:55 by ZPa0EcMwuECS
[教师之家] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 ASdOkHsho7FD 2026-08-28 8/400 2026-08-30 05:48 by ZPa0EcMwuECS
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 gy1nBQXYQJqL 2026-08-29 6/300 2026-08-30 01:58 by ZPa0EcMwuECS
[公派出国] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 gy1nBQXYQJqL 2026-08-29 4/200 2026-08-30 01:45 by ZPa0EcMwuECS
[基金申请] 中青基了要发朋友圈吗? +4 349506619 2026-08-28 4/200 2026-08-29 22:41 by alongwaytogo
[基金申请] 有没有仍没收到信息的 +5 德尚中行 2026-08-27 6/300 2026-08-29 18:10 by manplx
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 国际合作可查了,中了面上 (EPI+1)(金币+50) +18 Ldrop2023 2026-08-26 18/900 2026-08-26 11:15 by cmrandy
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
信息提示
请填处理意见