编写AIC工艺参数计算Matlab程序(疯狂踩坑)

Hello!

写这篇博客的目的是记录写Cadence Virtuoso IC617仿真所用工艺库参数计算程序时遇到的问题。

所用语言:Matlab

原理介绍

链接: 用Cadence Virtuoso IC617仿真工艺库参数

程序结构

程序核心为解三元二次方程组,带沟道调制系数的饱和区电流公式如下:

带沟道调制系数的饱和区电流公式

  1. 定义变量:要求的未知数有:Kn、laman、Vtn。已知的变量有:W、L、Vgs1、Vgs2、Vds1、Vds2以及其对应的Ids
  2. 定义方程组:将不同的变量带入方程,得到方程组
  3. 解方程

踩的坑

1、变量定义:

变量定义:将变量以矩阵的形式定义,方便以后的调用

%定义变量
W = 220e-6;
L = 180e-7;
Valueids = [0 0.8 1.0;1 28.62 53.72;1.5 30.35 56.21];
Vgs = [Valueids(1,2),Valueids(1,3)];
Vds = [Valueids(2,1), Valueids(3,1)];
Ids = [Valueids(2,2) Valueids(2,3);Valueids(3,2) Valueids(3,3)];

2、定义方程组

定义方程组:将变量赋值到方程中,以得到四个不同的方程,**但是在之前一定要把空矩阵中的某个元素赋值为字符类型,否则无法将方程赋值为矩阵的元素!!**你一定能感受到我的痛苦。

%定义方程组
eq = zeros(2,2);
eq = [laman 0;0 0];
for i = 1:2
    for o = 1:2
        eq(o,i) = [Ids(o,i)*10e-7 == (1/2)*Kn*(W/L)*(Vgs(i)-Vtn)^2*(1+laman*Vds(o))];
    end
end
eq1 = eq(1,1);
eq2 = eq(1,2);
eq3 = eq(2,1);
eq4 = eq(2,2);

3、解方程

解方程:这里注意!**slove函数解出来的变量是一个字符矩阵,数据长度及其离谱,无法直接输出,**需要用double函数转化为小数,才能进行接下来的舍解操作。

Knmax = double(max(Kn));
Knmin = double(min(Kn));
lamanmax = double(max(laman));
lamanmin = double(min(laman));
Vtnmax = double(max(Vtn));
Vtnmin = double(min(Vtn));

Kn = [Knmax Knmin];
laman = [lamanmax lamanmin];
Vtn = [Vtnmax Vtnmin];

这里的逻辑不严谨,欢迎大佬指正

舍解:将每个解代入第四个方程,误差最小的那组解为答案。

counter = 0;%对遍历次数进行计数,若为最大次数或者1次则结果可能不可靠

for i = 1:2
    for o = 1:1
        for p = 1:2
            Knfinal = Kn(1,i)
            lamanfinal = laman(1,1)
            Vtnfinal = Vtn(1,p)
            counter = counter + 1;
            t = Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))
            if (abs(Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))) < 0.0000001)
                flag = 1;
                break;
            end
        end
        if flag == 1
            break
        end
    end
    if flag == 1
        break
    end
end

最后输出答案

counter
Knfinal
lamanfinal
Vtnfinal

整体代码如下:

clear,clc
syms Kn laman Vtn;
W = 220e-6;
L = 180e-7;
eq = zeros(2,2);
Valueids = [0 0.8 1.0;1 28.62 53.72;1.5 30.35 56.21];
Vgs = [Valueids(1,2),Valueids(1,3)];
Vds = [Valueids(2,1), Valueids(3,1)];
Ids = [Valueids(2,2) Valueids(2,3);Valueids(3,2) Valueids(3,3)];

eq = [laman 0;0 0];

for i = 1:2
    for o = 1:2
        eq(o,i) = [Ids(o,i)*10e-7 == (1/2)*Kn*(W/L)*(Vgs(i)-Vtn)^2*(1+laman*Vds(o))];
    end
end

eq1 = eq(1,1);
eq2 = eq(1,2);
eq3 = eq(2,1);
eq4 = eq(2,2);

[Kn,laman,Vtn] = solve(eq1,eq2,eq3,Kn,laman,Vtn);

Knmax = double(max(Kn));
Knmin = double(min(Kn));
lamanmax = double(max(laman));
lamanmin = double(min(laman));
Vtnmax = double(max(Vtn));
Vtnmin = double(min(Vtn));

Kn = [Knmax Knmin];
laman = [lamanmax lamanmin];
Vtn = [Vtnmax Vtnmin];

counter = 0;

for i = 1:2
    for o = 1:1
        for p = 1:2
            Knfinal = Kn(1,i)
            lamanfinal = laman(1,1)
            Vtnfinal = Vtn(1,p)
            counter = counter + 1;
            t = Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))
            if (abs(Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))) < 0.0000001)
                flag = 1;
                break;
            end
        end
        if flag == 1
            break
        end
    end
    if flag == 1
        break
    end
end
counter
Knfinal
lamanfinal
Vtnfinal
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MATLAB可以通过计算AIC(Akaike信息准则)和BIC(贝叶斯信息准则)来进行模型评估。 AIC和BIC是用来比较不同模型的拟合优度和复杂度的准则。AIC衡量了模型对数据的拟合优度和模型的复杂度之间的折衷,它越小越好。而BIC在AIC的基础上加入了对模型参数个数的惩罚,更注重模型的简洁性。BIC和AIC都可以用来选择最佳模型。 在MATLAB中,可以使用拟合工具箱中的相关函数来计算AIC和BIC。首先,利用拟合工具箱中的模型拟合函数拟合数据,得到拟合后的模型对象。接着,使用模型对象的"aic"方法计算AIC值,使用"bic"方法计算BIC值。 例如,假设我们有一组观测数据,想要用高斯分布模型进行拟合并计算AIC和BIC。首先,将数据放入一个变量中,例如data。然后,使用拟合工具箱中的fitdist函数来拟合数据并得到模型对象。 ``` data = [1 2 3 4 5]; % 假设我们有一组观测数据 model = fitdist(data', 'Normal'); % 使用高斯分布模型拟合数据 ``` 最后,可以分别使用模型对象的"aic"和"bic"方法计算AIC和BIC值。 ``` aic_value = model.aic % 计算AIC值 bic_value = model.bic % 计算BIC值 ``` 以上就是使用MATLAB计算AIC和BIC的简单方法。在实际使用中,可以根据不同的模型和数据进行相应的调整和运用。 ### 回答2: AIC(Akaike Information Criterion)和BIC(Bayesian Information Criterion)是模型选择的常用准则,可以用于在多个模型中选择最合适的模型。在MATLAB中,可以通过以下方法计算AIC和BIC。 AIC是一个信息准则,用于衡量模型对数据的拟合程度。在MATLAB中,可以使用`aic()`函数来计算AIC。该函数需要两个参数:模型的负对数似然值和模型的参数数量。假设模型的负对数似然值为`negloglik`,参数数量为`num_params`,则可以使用以下代码计算AIC: ``` AIC = 2 * num_params - 2 * negloglik; ``` BIC是一个基于贝叶斯定理的信息准则,也用于模型选择。在MATLAB中,可以使用`bic()`函数来计算BIC。该函数也需要两个参数:模型的负对数似然值和模型的参数数量。假设模型的负对数似然值为`negloglik`,参数数量为`num_params`,则可以使用以下代码计算BIC: ``` BIC = num_params * log(num_samples) - 2 * negloglik; ``` 这里的`num_samples`表示样本数量。在计算BIC时,由于考虑到了样本数量,因此相对于AIC,BIC更倾向于选择较简单的模型。 总结起来,MATLAB计算AIC和BIC的方法分别是使用`aic()`和`bic()`函数,并传入模型的负对数似然值和参数数量作为参数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DearAaron_CN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值