科学计算与MATLAB语言

刘卫国 蔡旭晖 吕格莉 何小贤

目录

  • 1 初识MATLAB
    • 1.1 课程导入
    • 1.2 单元测验
  • 2 MATLAB基础知识
    • 2.1 MATLAB系统环境
    • 2.2 MATLAB数值数据
    • 2.3 变量及其操作
    • 2.4 MATLAB矩阵的表示
    • 2.5 矩阵元素的引用
    • 2.6 MATLAB基本运算
    • 2.7 字符串处理
    • 2.8 单元测验
  • 3 MATLAB矩阵处理
    • 3.1 特殊矩阵
    • 3.2 矩阵变换
    • 3.3 矩阵求值
    • 3.4 矩阵的特征值与特征向量
    • 3.5 稀疏矩阵
    • 3.6 单元测验
  • 4 MATLAB程序流程控制
    • 4.1 顺序结构程序
    • 4.2 用if语句实现选择结构
    • 4.3 用switch语句实现选择结构
    • 4.4 用for语句实现循环结构
    • 4.5 用while语句实现循环结构
    • 4.6 函数文件的定义与调用
    • 4.7 函数的递归调用
    • 4.8 函数参数与变量的作用域
    • 4.9 单元测验
  • 5 MATLAB绘图
    • 5.1 二维曲线
    • 5.2 绘制图形的辅助操作
    • 5.3 其他形式的二维曲线
    • 5.4 三维曲线
    • 5.5 三维曲面
    • 5.6 图形修饰处理
    • 5.7 交互式绘图工具
    • 5.8 单元测验
  • 6 数据分析与多项式计算
    • 6.1 数据统计分析
    • 6.2 多项式计算
    • 6.3 数据插值
    • 6.4 数据插值应用举例
    • 6.5 曲线拟合
    • 6.6 曲线拟合应用举例
    • 6.7 单元测验
  • 7 数值微积分与方程求解
    • 7.1 数值微分与数值积分
    • 7.2 线性方程组求解
    • 7.3 线性方程组应用举例
    • 7.4 非线性方程求解与函数极值计算
    • 7.5 常微分方程数值求解
    • 7.6 常微分方程应用举例
    • 7.7 单元测验
  • 8 MATLAB符号计算
    • 8.1 符号对象
    • 8.2 符号微积分
    • 8.3 级数
    • 8.4 符号方程求解
    • 8.5 单元测验
  • 9 MATLAB图形用户界面设计
    • 9.1 图形窗口与坐标轴
    • 9.2 曲线与曲面对象
    • 9.3 图形用户界面设计方法
    • 9.4 用户界面设计工具
    • 9.5 APP设计工具
    • 9.6 图形用户界面应用举例
    • 9.7 单元测验
  • 10 Simulink系统仿真
    • 10.1 Simulink仿真基础
    • 10.2 子系统的创建与封装
    • 10.3 S函数的设计与应用
    • 10.4 Simulink仿真应用举例
    • 10.5 单元测验
  • 11 外部程序接口
    • 11.1 在Excel中使用MATLAB
    • 11.2 MATLAB文件操作
    • 11.3 在其他语言程序中读写MATLAB的数据文件
    • 11.4 在MATLAB中调用其他语言编写的程序
    • 11.5 在其他语言程序中调用MATLAB函数
    • 11.6 单元测验
  • 12 课外阅读
    • 12.1 阅读
非线性方程求解与函数极值计算

视频


拓展学习

例1  求f(x)=0在x0=-5和x0=1作为迭代初值时的根。

>> f=@(x) x-1./x+5;

>> x1=fzero(f,-5)

 

>> x2=fzero(f,1)

 

>> x3=fzero(f,0.1)

>> f=@(x) x-1./x+5;

>> x1=fsolve(f,-5,optimset('Display','off'))

 

>> x2=fsolve(f,1,optimset('Display','off'))

 

>> x3=fsolve(f,0.1,optimset('Display','off'))


f(x)=x^2-1=0的根

f=@(x) x.^2-1;

x=[];

x0=-0.25:0.001:0.25;

for x00=x0

    x=[x,fzero(f,x00)];

end

plot(x0,x,'-o')

xlabel('初值');

ylabel('方程的根');

axis([-0.25,0.25,-1,1])


例2  求下列方程组在(1,1,1)附近的解并对结果进行验证。

>> f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];

>> f([1,1,1])

 

>> x=fsolve(f,[1,1,1],optimset('Display','off'))

 

>> f(x)


例3  求函数f(x)在区间(-10,-1)和(1,10)上的最小值点。

>> f=@(x) x-1./x+5;

>> [xmin,fmin]=fminbnd(f,-10,-1)

 

>> [xmin,fmin]=fminbnd(f,1,10)


例4  求解有约束最优化问题。

f=@(x) 0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;

x0=[0.5;0.5];

A=[-1,-0.5;-0.5,-1];

b=[-0.4;-0.5];

lb=[0;0];

option=optimset('Display','off');

[xmin,fmin]=fmincon(f,x0,A,b,[],[],lb,[],[],option)


例5  要使每周送货车的里程最小,仓库应建在xy平面的什么位置?

a=[10,30,16.667,0.555,22.2221];

b=[10,50,29,29.888,49.988];

c=[10,18,20,14,25];

f=@(x) sum(c.*sqrt((x(1)-a).^2+(x(2)-b).^2));

[xmin,fmin]=fminsearch(f,[15,30])


例6  在例5中,如果由于地域的限制,仓库必须建在曲线y=x^2上,则它应该建在何处?

非线性约束的函数文件funny.m:

function [c,h]=funny(x)

c=[];

h=x(2)-x(1)^2;


>> a=[10,30,16.667,0.555,22.2221];

>> b=[10,50,29,29.888,49.988];

>> c=[10,18,20,14,25];

>> f=@(x) sum(c.*sqrt((x(1)-a).^2+(x(2)-b).^2));

>> [xmin,fmin]=fmincon(f,[15,30],[],[],[],[],[],[],'funny')