MATLAB台大郭彦甫老师课程笔记:第十课:方程式求根

本文介绍了如何在MATLAB中使用Syms进行符号计算,包括定义变量、求解一元和二元方程、微分运算,以及应用在定积分、函数求解和图形拟合等实例。通过symsys工具,展示了求解复杂表达式的解决方案和使用fsolve函数解决多变量问题的过程。
摘要由CSDN通过智能技术生成

1.定义变量:
在这里插入图片描述

syms x
>> x+ x + x
 
ans =
 
3*x

同样, 包含变量x 的表达式也会变成一个变量:

>> y =  x ^ 2 - 2 * x - 8
 
y =
 
x^2 - 2*x - 8

2.使用solve求根:
在这里插入图片描述

syms x
y = x* sin(x) - x;
solve(y, x)

ans =
 
    0
 pi/2

在这里插入图片描述

syms x
y1 = (cos(x))^2 - (sin(x))^2; y2 = (cos(x))^2 + (sin(x))^2;
solve(y1, x)

ans =
 
pi/4

solve(y2, x)

ans =
 
Empty sym: 0-by-1

使用solve 解出二元一次联立方程

在这里插入图片描述

syms x y
eq1 = x - 2*y -5;
eq2 = x + y - 6;
A = solve(eq1, eq2, x, y)

>> A.x
 
ans =
 
17/3
 
>> A.y
 
ans =
 
1/3

在这里插入图片描述
R2018b 需要去掉引号

>> syms x a b
solve(a * x ^ 2 - b)
% 用a 和b 表示 x
ans =
 
  b^(1/2)/a^(1/2)
 -b^(1/2)/a^(1/2)
 
>> syms x a b
solve(a * x ^ 2 - b, b)
% 用a 和x 表示 b
ans =
 
a*x^2

第十课课后练习1:
在这里插入图片描述

syms x y a b r
solve((x-a)^2+(y-b)^2-r^2, x)

ans =
 
 a + (b + r - y)^(1/2)*(r - b + y)^(1/2)
 a - (b + r - y)^(1/2)*(r - b + y)^(1/2)
% 第二题的弹幕大佬做法
syms a b c d x1 x2 x3 x4 
eq1=a*x1+b*x3-1; eq2=a*x2+b*x4; eq3=c*x1+d*x3; eq4=c*x2+d*x4-1;
A=solve(eq1,eq2,eq3,eq4,x1,x2,x3,x4)

>> A.x1
 
ans =
 
d/(a*d - b*c)
 
>> A.x2
 
ans =
 
-b/(a*d - b*c)
 
>> A.x3
 
ans =
 
-c/(a*d - b*c)
 
>> A.x4
 
ans =
 
a/(a*d - b*c)

>> inv([a b;c d])
 
ans =
 
[  d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c),  a/(a*d - b*c)]
% 和用MATLAB内置函数的方法求出的答案相同

在这里插入图片描述
3.使用diff 函数计算某个变量的微分:

syms x
y = 4 * x ^ 5;
yprime = diff(y)

yprime =
 
20*x^4

第十课课后练习2:
在这里插入图片描述

syms x y
f = (exp(x^2))/(x^3-x+3); g = (x^2+x*y-1)/(y^3+x+3);
fprime = diff(f)
gprime = diff(g)

fprime =
 
(2*x*exp(x^2))/(x^3 - x + 3) - (exp(x^2)*(3*x^2 - 1))/(x^3 - x + 3)^2
 
 
gprime =
 
(2*x + y)/(y^3 + x + 3) - (x^2 + y*x - 1)/(y^3 + x + 3)^2

一个尝试:(结论写在前面:看来直接对g 不做指示地求微分,是直接对x 求微分了。

dgx = diff(g, x)
dgy = diff(g, y)

dgx =
 
(2*x + y)/(y^3 + x + 3) - (x^2 + y*x - 1)/(y^3 + x + 3)^2
 
 
dgy =
 
x/(y^3 + x + 3) - (3*y^2*(x^2 + y*x - 1))/(y^3 + x + 3)^2

在这里插入图片描述
积分: int 函数

syms x; y = x^2*exp(x);
z = int(y); z = z-subs(z, x, 0)
% 因为求出来之后如果要满足另一个条件,z 就必须减掉一个常数2
% 因此后面那个式子的意思是:对于一个式子z,其中有一个变量为x,把x用0取代,求出z(0)
% 再用z-z(0),得到最符合条件的z 值

z =
 
exp(x)*(x^2 - 2*x + 2) - 2

第十课课后练习3:
在这里插入图片描述例题是不定积分,这个题是定积分了

syms x
y = (x^2-x+1)/(x+3);
z = int(y)
subs(z, x, 10) - subs(z, x, 0)

z =
 
13*log(x + 3) - 4*x + x^2/2
 
 
ans =
 
13*log(13) - 13*log(3) + 10

在这里插入图片描述
在这里插入图片描述上图中:f2: inline function (内联函数) 还有,一定要加上初始猜测数值。

>> f2 = @(x) (1.2*x + 0.3 + x * sin(x))
fsolve(f2, 0)

f2 =

  包含以下值的 function_handle:

    @(x)(1.2*x+0.3+x*sin(x))


Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>


ans =

   -0.3500

第十课课后练习4:
在这里插入图片描述

f = @(x) ([2*x(1)-x(2)-exp(-x(1)); -x(1)+2*x(2)-exp(-x(2))]);
A = fsolve(f, [-5,-5])

A =

    0.5671    0.5671

在这里插入图片描述即:当且仅当该图像穿过x 轴时,这个函数fzero 才能解出来。

在这里插入图片描述

roots([1 -3.5 2.75 2.125 -3.875 1.25])

ans =

   2.0000 + 0.0000i
  -1.0000 + 0.0000i
   1.0000 + 0.5000i
   1.0000 - 0.5000i
   0.5000 + 0.0000i

注意:
在这里插入图片描述

roots([1 -6 -12 81])

ans =

   -3.5969
    5.5097
    4.0872

MATLAB找根的方法:

在这里插入图片描述
二分法;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤:x0 -> f(x0) -> f’(x0) -> x1 -> f(x1) -> f’(x1) -> x2…

在这里插入图片描述
(迭代快于递归):
递归法:
在这里插入图片描述
讲到递归时最常用的阶乘实例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值