光速上手matlab入门级学习必看matlab超长细练习matlab,福利分享Matlab全套资料_function [q, r] = gramschmidt(a)(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

   -7.0000    0.0000    0.0000
    0.0000    2.0000         0
    0.0000   -0.0000    2.0000

06非线性方程组

⚪️   函数和方程非线性方程组变量不是一次的二次大于一次,这与线性方程组进行对比就能很清晰了

% 定义非线性方程组
f = @(x) [9*x(1)^2 + 36*x(2)^2 + 4*x(3)^2 - 36; x(1)^2 - 2*x(2)^2 - 20*x(3); 16*x(1) - x(1)^3 - 2*x(2)^2 - 16*x(3)^2];
% 初始值
x0 = [1; 1;1];
% 求解方程组
x = fsolve(f, x0);
% 输出结果
disp(x);

输出结果

​​​​​​​

   0.1342
    0.9972
   -0.0985

07函数的极值和零点

⚪️"零点" 通常用于描述函数在 x 轴上的交点,也就是函数的值等于 0 的点。一个函数可能有多个零点,也可能没有零点。fzero 函数用于求解函数的零点。“求根” 通常用于描述解方程的过程,也就是找到一个或多个方程的根。对于一个方程 f ( x ) = 0 f(x) = 0 f(x)=0,求根就是要找到它的解 x,使得 f(x) = 0。一个方程可能有多个根,也可能没有根。fsolve 函数用于求解方程的根。在数学中,极值是函数在某一区间内的最大值或最小值,也称为局部极值。在 MATLAB 中,可以使用 fminbnd 和 fminsearch 函数找到函数的局部最小值。

求根

这里只求最后一个,其他同理

​​​​​​​

% 函数表达式
f =(2.*x+3).^3-4
% 使用conv展开
f_v = expand(f) % 8*x^3 + 36*x^2 + 54*x + 23
% 展开后提取系数求根
p = [8,36,54,23]
value = roots(p)
% 验证polyval(多项式系数列表,代入的值)
polyval(p,value)

输出结果:

​​​​​​​

%定义符号变量t
syms t
x = log(cos(t));
y = cos(t)-t.*sin(t);
%x对t求导数,求导1次
dx_dt = diff(x,t)
%y对t求导数,求导1次
dy_dt = diff(y,t)
% 求方程的解,当x=-1的时候t等于多少
% 使用符号函数solve进行解答
% t的区间在[0,1.5]大于零
x=log(cos(t))==-1;
tt = abs(solve(x,t))
%代入到方程中,subs(函数,旧变量,新变量)
dx_dt = subs(dx_dt,t,tt)
dy_dt = subs(dy_dt,t,tt)
%最后得数,符号函数转换为具体的值用eval
eval(dx_dt./dy_dt)

或者用fzero,需要指定区间

​​​​​​​

%定义符号变量t
syms t
x = log(cos(t));
y = cos(t)-t.*sin(t);
%x对t求导数,求导1次
dx_dt = diff(x,t)
%y对t求导数,求导1次
dy_dt = diff(y,t)
% 求方程的解,当x=-1的时候t等于多少
% 使用符号函数solve进行解答
% t的区间在[0,1.5]大于零
x=log(cos(t))==-1;
tt = abs(solve(x,t))
%代入到方程中,subs(函数,旧变量,新变量)
dx_dt = subs(dx_dt,t,tt)
dy_dt = subs(dy_dt,t,tt)
%最后得数,符号函数转换为具体的值用eval
eval(dx_dt./dy_dt)

fzero 函数用于求解单变量非线性方程的零点,即在给定区间内找到函数的一个根。它使用的是单点迭代法(也称作牛顿迭代法),通过不断逼近函数的零点来计算方程的解。因此,fzero 函数适用于求解单变量非线性方程的根,但不能用于求解多变量非线性方程组的根。

roots 函数则用于求解多项式方程的根,即找到多项式在复数域中的所有根。它的输入是一个包含多项式系数的向量,输出是一个包含多项式在复数域中所有根的向量。roots 函数使用的是拉格朗日-牛顿插值法,通过对多项式进行插值来计算多项式的根。因此,roots 函数适用于求解多项式方程的根,但不能用于求解非多项式方程的根。

极值

fminbnd 是 MATLAB 中用于求解单变量有界函数最小值的函数,它可以在指定的区间内自动寻找一个函数的最小值点。fminbnd 函数的基本语法如下:

[x, fval] = fminbnd(fun, x1, x2)

其中,fun 表示待求解的单变量有界函数,可以是一个函数句柄、一个匿名函数或一个函数字符串;x1x2 分别表示待求解区间的左右端点,即函数的取值范围。函数的输出结果包括一个标量 x,表示函数的最小值点,以及一个标量 fval,表示函数在最小值点的取值。

需要注意的是,fminbnd 函数使用的是黄金分割法(golden section method),通过不断狭窄区间范围来逐步逼近函数的最小值点。因此,fminbnd 函数适用于求解单变量有界函数的最小值,但不能用于求解多变量函数的最小值、无界函数的最小值或非连续函数的最小值。

下面是一个使用 fminbnd 函数求解函数最小值的简单例子:

​​​​​​​

%定义符号变量t
syms t
x = log(cos(t));
y = cos(t)-t.*sin(t);
%x对t求导数,求导1次
dx_dt = diff(x,t)
%y对t求导数,求导1次
dy_dt = diff(y,t)
% 求方程的解,当x=-1的时候t等于多少
% 使用符号函数solve进行解答
% t的区间在[0,1.5]大于零
x=log(cos(t))==-1;
tt = abs(solve(x,t))
%代入到方程中,subs(函数,旧变量,新变量)
dx_dt = subs(dx_dt,t,tt)
dy_dt = subs(dy_dt,t,tt)
%最后得数,符号函数转换为具体的值用eval
eval(dx_dt./dy_dt)
% 定义一个函数fun = @(x) x.^2 - 2*x + 1;% 求解函数的最小值x1 = 0; % 区间x2 = 2; % 区间[x, fval] = fminbnd(fun, x1, x2);% 输出结果disp(x); %坐标xdisp(fval); %坐标y

在上述代码中,我们定义了一个函数 fun,它表示函数 f(x)=x^2-2x+1。然后,我们使用 fminbnd 函数求解该函数在区间 [0,2]内的最小值点。需要注意的是,为了确保函数的最小值在指定区间内,需要根据具体的问题选择合适的区间范围,并进行必要的验证和调整,以保证求解结果的准确性和稳定性。与fminbnd相似的是fminsearch解决多元函数极值问题,函数的参数相似,第一个是多元函数表达式,第二个是指定区间。

08微积分

⚪️微积分是数学中的一个分支,主要研究函数的微分和积分微积分

导数(微分)

最后输出:

​​​​​​​

dx_dt =

-sin(t)/cos(t)


dy_dt =

- 2*sin(t) - t*cos(t)


tt =

 acos(exp(-1))
 acos(exp(-1))


dx_dt =

 -exp(1)*(1 - exp(-2))^(1/2)
 -exp(1)*(1 - exp(-2))^(1/2)


dy_dt =

 - 2*(1 - exp(-2))^(1/2) - exp(-1)*acos(exp(-1))
 - 2*(1 - exp(-2))^(1/2) - exp(-1)*acos(exp(-1))


ans =

    1.0995
    1.0995

积分

%被积函数表达式
f= @(x) exp(2.*x).*cos(x).^3;
% 积分方式一
disp('integral方法');
Q1 = integral(f, 0, 2*pi)
%积分方式2
disp('quad方法');
Q2 = quad(f, 0, 2*pi)

输出结果:

​​​​​​​

integral方法

Q1 =

   9.7054e+04

quad方法

Q2 =

   9.7054e+04

函数梯度

在数学中,梯度是一个向量,它的方向与函数值增加最快的方向相同,大小表示函数值增加最快的速率。在 MATLAB 中,可以使用符号工具箱和数值工具箱计算函数的梯度。

使用符号工具箱,可以对符号表达式进行梯度计算。可以使用 gradient 函数计算符号表达式的梯度向量。以下是一个示例代码,使用符号工具箱计算函数 f(x,y)=x2+y2$ 在点 (1,2)$处的梯度向量:

​​​​​​​

% 定义符号变量和函数
syms x y;
f = x^2 + y^2;

% 计算梯度
grad_f = gradient(f, [x, y]);

% 在点 (1,2) 处计算梯度向量
x0 = 1;
y0 = 2;
grad_f_val = subs(grad_f, [x, y], [x0, y0]);

% 输出结果[2,4]
disp([grad_f_val]) % 2 4

在这个代码中,我们首先定义了符号变量 xy,以及函数 f(x,y)=x2+y2。然后,我们使用 gradient 函数计算了函数的梯度向量。最后,我们在点 (1,2) 处计算了梯度向量,并输出了结果。运行这个代码,可以得到函数 f(x,y)=x2+y2在点 (1,2) 处的梯度向量为 [2, 4]。

​​​​​​​09符号对象

⚪️符号运算使用–种特殊的数据类型,称为符号对象(SymbolicObject),用字

符串形式表达,但又不同于字符串( Char Array).符号运算中的变量、函数和表达式都是符号对象.

% 这是数值表达式
n = pi^2
% 数值转化为符号对象
a = sym(n)
% 定义符号变量以及符号计算表达式
syms x y c
d = x^3+2*y^2;
% 定义符号矩阵
A = [x,y;2*x,2*y]
% 符号变量x用符号c替代
A = subs(A,x,c)

从上面可以看出万物皆可符号,定义单个符号使用sym,多个使用syms

计算精度和数据类型转换

符号数值计算默认精度为32位十进制,是MATLAB数值计算的两倍,符号工具箱还提供了计算精度设置指令,可以定义任意精度的数值计算.“vpa” 是 MATLAB 中的一个函数,它的全称是 “Variable Precision Arithmetic”,中文翻译为"可变精度算术"。该函数可以用来进行高精度计算,避免由于浮点数运算带来的舍入误差。

% s为圆周率
s=pi
% 将数值计算精度设置为8位
digits(8)
% 求s的数值结果
x=vpa(s)
% 采用n位计算精度求s的数值结果
x=vpa(s,n)
%符号对象转换为双精度
double(s)
%符号对象转换为字符串
char(s)

输出结果:

​​​​​​​

s =

    3.1416

x =

3.1415927


x =

3.141592654


ans =

    3.1416


ans =

10符号矩阵和符号函数

⚪️MATLAB大部分矩阵和数组运算符及指令都可以应用于符号矩阵,大部分MATLAB数学函数和逻辑关系运算也可用于符号对象.另外还有

符号矩阵

clear;
% 符号矩阵A
A = sym('[a,b;c,d]');
% B为A矩阵的逆
B = inv(A)
% 矩阵的运算
A./B
B.\A
A/B
B\A
% 求符号矩阵的特征值和特征向量
eig(A)

输出结果:

B =

[  d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c),  a/(a*d - b*c)]


ans =

[ (a*(a*d - b*c))/d,         b*c - a*d]
[         b*c - a*d, (d*(a*d - b*c))/a]


ans =

[ (a*(a*d - b*c))/d,         b*c - a*d]
[         b*c - a*d, (d*(a*d - b*c))/a]


ans =

[ a^2 + b*c, b*(a + d)]
[ c*(a + d), d^2 + b*c]


ans =

[ a^2 + b*c, b*(a + d)]
[ c*(a + d), d^2 + b*c]


ans =

 a/2 + d/2 - (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2
 a/2 + d/2 + (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2       
        

符号函数

% f(x,y)=(x-y)^3
% g(x,y)=(x+y)^3
% 定义符号变量
syms x y;
%定义函数
f=(x-y)^3;
g=(x+y)^3;
%两个函数相乘
h = f*g
%展开多项式
hs = expand(h)
% 因式分解
hf = factor(hs)
%定义符号函数,自变量是x,y
fun = symfun(f*g,[x,y])
%符号计算替换无需使用subs方法
s = fun(x,x^2+x+1)
%合并同类项,变量x
scol = collect(s,x)
%化简
ssim = simplify(scol)
%最简形式
ssim =simple(scol)
% 数学公式的Latex输出
latex(ssim)
% 数学公式的C语言代码
ccode(ssim)
% 数学公式的matlab匿名函数代码

输出结果:

h =

(x + y)^3*(x - y)^3


hs =

x^6 - 3*x^4*y^2 + 3*x^2*y^4 - y^6


hf =

(x - y)^3*(x + y)^3


fun(x, y) =


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


%符号计算替换无需使用subs方法
s = fun(x,x^2+x+1)
%合并同类项,变量x
scol = collect(s,x)
%化简
ssim = simplify(scol)
%最简形式
ssim =simple(scol)
% 数学公式的Latex输出
latex(ssim)
% 数学公式的C语言代码
ccode(ssim)
% 数学公式的matlab匿名函数代码

输出结果:

h =

(x + y)^3*(x - y)^3


hs =

x^6 - 3*x^4*y^2 + 3*x^2*y^4 - y^6


hf =

(x - y)^3*(x + y)^3


fun(x, y) =


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值