此文章是我的大学课程《计算方法》的总结,所选用的代码是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
时间: 2024-11-04 05:02:56