【MATLAB】spline函数在插值时报错问题的解决

在用MATLAB写自控原理的例题的时候,使用到了串联超前校正,其中有有一段代码使用到了spline函数,其作用相当于在一条已知直线上,已知x坐标,求解y坐标的功能。

在串联超前校正中正好有用武之地,在求得-10lg(a)之后,需要作平行线交原有的传递函数bode图幅频特性曲线上,以求得校正后的截止频率Wc,即卢老师课程中提到的OMEGA_A。实现代码如下:

fai_m = r_star - Pm + delta;
a = (1+sind(vpa(fai_m,3)))/(1-sind(vpa(fai_m,3)));
a = vpa(a,3);
baselin_10loga = -10*log10(a);
[Mag,phase,w] = bode(num,den);
%注意要将幅值转换成分贝dB的形式
mag_db = mag2db(Mag);
%模拟作图计算的环节
D = 3.9;
% 对Omega_D进行向右偏移,偏移量为D
omega_A = spline(mag_db,w,double(baselin_10loga));
omega_C = (wcp)^2/(omega_A);
omega_D = (omega_A)^2/(omega_C)+D;
num_correct = [1/omega_C,1];
den_correct = [1/omega_D,1];
%得到校正环节的传函
Gcs = tf(num_correct,den_correct);

可以看到求解OMEGA_A的时候用到了spline函数,当时出现了一个报错为:

报错的内容很简单,spline中要求必须为双精度或者单精度类型,查看工作区的数值表,发现平行线的参考插值baseline_loga的数据类型是sym符号类型,

其他的w,mag_db两个数据是double类型即双精度类型,

所以需要将baseline_loga转换成双精度类型,使用函数double()即可,类似于C语言中的强制类型转换。

则更正为

omega_A = spline(mag_db,w,double(baselin_10loga));

则可以成功运行,关于超前校正可以参考下篇文章:

https://blog.csdn.net/qq_59911256/article/details/133654825?spm=1001.2014.3001.5501

Matlabspline函数用于进行三次样条插值计算。该函数有两种用法: 1. 使用s = spline(x, y, xq)进行插值计算。其中,x和y是已知的坐标点,xq是需要进行插值的位置。函数返回一个与xq中查询点对应的插值的向量s。s的由x和y的三次样条插值确定。这种用法适用于已知目标曲线上的坐标点和需要进行插值的位置。 2. 使用pp = spline(x, y)进行分段多项式结构体的创建,以用于后续的插值计算。这种用法适用于先创建一个插值对象,然后使用ppval函数对任意位置进行插值计算。 具体的插值计算方法涉及到三次样条插值函数的构造,可以参考相关文献或Matlab的帮助文档了解更多详细信息。 [2 [3123 #### 引用[.reference_title] - *1* *2* [MATLAB中的三次样条插值spline函数](https://blog.csdn.net/qq_39915672/article/details/104621016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [【 MATLABspline 函数介绍(三次样条数据插值)](https://blog.csdn.net/Reborn_Lee/article/details/83421581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值