码迷,mamicode.com
首页 > 其他好文 > 详细

matlab 计算方法的总结

时间:2015-05-29 17:20:04      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

此文章是我的大学课程《计算方法》的总结,所选用的代码是matlab的形式,因为内容都是个人的总结,大部分都是只是一个函数+事例搞定。。所以要问我基础的东西其实我也不是很懂。。

 

所以下面这文章不讲理论,,只讲函数怎么用。。能力有限哈。。

 

 

目录
一元线性线性方程的求解
   什么是一元线性方程,什么是一元非线性方程?
    二分法
    牛顿法
    弦截法

线性方程的计算方法
       相关命令的基础知识
       高斯消去法
      LT分解
        

插值法 
     线性插值
     拉格朗日插值
     牛顿插值
     样条插值
     其他命令

数值积分
   牛顿-柯西公式
   数值积分命令

常微分方程的数值解法
   (缺课了)


最优方法
    没理论,只有命令


二分法 function [x,y,Result]=erfenfa(a,b) %erfenfa是函数名(a,b)是参数名,x,y,result是返回值
%二分法,抄老师的。已加上注释
%输入a,b--区间端点,要求该区间必须有一个跟
%输出x---近似跟
% y--fun(x)
%


y1=fun(a); %fun--函数名称,输入一个x得到他的函数值
y2 = fun(b);

if y1*y2 >=0
  x=[]; y=[] ; Result=[];
  return ;
end

delta = b-a; %得到他的第一次距离差是否符合精度

Result=zeros(1,2) ; %Result是迭代的试验结果,这句话的意思是初始化Result矩阵
k=1; %k=1也是初始化值。k是表示迭代多少次

while abs(delta) >1e-8 %当迭代到的初值未我想追求的精度的时候
  xm=(a+b)/2; %继续缩小a+b /2
  ym=fun(xm); %得到函数值
  Result(k,1) = xm; %Result是保存每一次的试验结果的矩阵
  Result(k,2) = ym;
  k = k+1; %k记录迭代多少次
  if ym==0 %如果函数值是0,就说明我找到了那个点,函数就退出
    x=xm;
    return;
  elseif %否则,如果 ym*y1>0 ,所以ym*y2<0 ,说明函数点在区间右侧 所以a=xm;
    ym*y1>0
a=xm;
  else
    b=xm; % 说明 ym*y2>0 所以ym*y1<0 ,说明函数点在区间左侧 所以b=xm;
  end
  delta = b-a; %得到下一次距离差,看是否得到精度的差
end

x = (a+b)/2 ; %这里得到的是我们最终点的值
y = fun(x) ; %得到的最终结果的函数值
Result(k,1) = x; %保存最终结果
Result(k,2) = y;

function y = fun(x) %测试一个简单的函数
y = x*(x*x-1) -1;
end

 

一元线性线性方程的求解
 什么是线性方程,什么是非线性方程?
首先我们要理解线性方程也称一次方程。指未知数都是一次的方程。其一般的形式是ax+by+...+cz+d=0线性方程也称为一次方程。
因为在笛卡尔坐标系上任何一个一次方程的表示都是一条直线。组成一次方程的每个项必须是常数或者是一个常数和一个变量的乘积。
且方程中必须包含一个变量,因为如果没有变量只有常数的式子是算数式而非方程式。一元也就是一个未知量了。

非线性方程所谓的非线性方程,那就是未知的次方数不一定是一次的方程咯。非线性方程,就是因变量与自变量之间的关系不是线性的关系,
这类方程很多,例如平方关系、对数关系、指数关系、三角函数关系等等。求解此类方程往往很难得到精确解,经常需要求近似解问题。
相应的求近似解的方法也逐渐得到大家的重视。

一元是只有一个未知量,也就是一个x

 

牛顿法,切线法

基本思想:

 

%割线法
弦截法
弦截法是一种求方程根的基该方法,在计算机编程中常用。
 
他的思路是这样的:任取两个数x1、x2,求得对应的函数值f(x1)、f(x2)。
如果两函数值同 号,则重新取数,直到这两个函数值异号为止。
连接(x1,f(x1))与(x2,f(x2))这两点形成的直线与x轴相交于一点x,求得对应的f(x),
判断其与f(x1)、f(x2)中的哪个值同号。如f(x)与f(x1)同号,则f(x)为新的f(x1)。
将新的f(x1)与f(x2)连接,如此循 环。体现的是极限的思想。


function[x,y]=gexianfa(x0,x1) %割线法程序 %输入 x0,x1 ---初始迭代点 %输出 x---近似跟 % y---fun(x) %{ %} y0 = fun(x0); %fun--函数名,输入x可得到其函数值 y1 = fun(x1); %初始化迭代点 x2 = x1-y1*(x1-x0)/(y1-y0); % 根据y1-y0 / x1-x0 来定斜率, 通过x1,y1点 %得出方程 y1-y0 / x1-x0 (x-x1) = y-y1 ;再过 这条直y=0的 点,得到这条方程 delta = x2 -x1; while abs(delta ) >1e-8 %根据规律,先列出一条数列表达式,再算出x(k+1),再发现迭代的变化量 %然后再去搞 y2=fun(x2); x0 = x1; y0 = y1; x1 = x2; y1 = y2; x2 = x1-y1*(x1-x0)/(y1-y0); delta = x2-x1; end x= x2; y = fun(x); end function y = fun(x) y = x-exp(-x); end

 





 

matlab 计算方法的总结

标签:

原文地址:http://www.cnblogs.com/davidway/p/4537031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!