利用牛顿法接非线性方程组的Matlab程序实例
2016-03-28 10:34
483 查看
首先将线性方程组写成f(x)=0的形式,编写第一个Matlab函数
然后是方程组的Jacobi矩阵,编写第二个Matlab函数
然后求解方程组的程序
function f = fun() % 求解: % 3*x1-cos(x2*x3)-1/2 = 0 % x1^2-81*(x2+0.1)^2+sin(x3)+1.06 = 0 % exp(-x1*x2)+20*x3+(10*pi-3)/3 = 0 % 求解精度为0.00001 syms x1 x2 x3 f1 = 3*x1-cos(x2*x3)-1/2; f2 = x1^2-81*(x2+0.1)^2+sin(x3)+1.06; f3 = exp(-x1*x2)+20*x3+(10*pi-3)/3; f = [f1 f2 f3];
然后是方程组的Jacobi矩阵,编写第二个Matlab函数
function df = dfun() f = fun(); df = [diff(f,'x1'); diff(f, 'x2'); diff(f, 'x3')]; df = df';
然后求解方程组的程序
function x = newton(x0, eps, N) % x0是初值,可以任取,不需要满足方程组 % 最后得到的解与初值选取有关 % eps为精度 % N最大迭代次数 for i = 1:N f = eval(subs(fun(), {'x1', 'x2', 'x3'}, {x0(1), x0(2), x0(3)})); df = eval(subs(dfun(), {'x1', 'x2', 'x3'}, {x0(1), x0(2), x0(3)})); x = x0 - f/df; if norm(x - x0) < eps for j = 1:length(x) fprintf('%.2f\t', x(j)); end break; end x0 = x; end
相关文章推荐
- matlab随机数
- matlab-非线性方程求根函数及函数曲线绘制
- 粒子群算法的matlab实现
- MATLAB中利用多幅图片生成GIF动画
- matlab 轻松绘制出曲线的动画效果
- MATLAB读入视频出错的解决方法
- matlab读取xml文件
- 应用中Matlab语句学习笔记总结1
- matlab两种不同模式的并行运算
- 在matlab上安装svm
- 在matlab上安装svm
- DL:Convolutional Deep Belief Networks(CDBN) 代码(matlab)理解
- MATLAB绘制空间域高斯函数
- matlab 调用 opengl 画骨架
- MATLAB以MEX方式调用C代码
- MATLAB内的傅里叶变换
- Python and Matlab绘制曲线图
- 装载: Matlab 提取矩阵 某一行 或者 某一列 的方法
- MATLAB中字符串数组的创建和引用
- fluent ubuntu gnom matlab parallel