matlab 批量定义变量及批量传入函数参数

本文探讨了在MATLAB编程中遇到的批量定义变量和自定义函数参数传递的问题。传统方法繁琐易错,作者提出了一种改进方案,通过使用cell数组和eval函数批量定义变量并存储于cell中,然后在函数中利用varargin参数传递。这种方法简化了大量变量的处理,但可能在复杂运算中引入新问题。文章鼓励读者分享更多优化建议。
摘要由CSDN通过智能技术生成

光度立体涉及到多光源及其对应的多幅图像,在用matlab进行编程时,遇到批量定义变量和自定义函数的批量传入参数的问题。现总结如下,欢迎大家批评指正。

  • 传统定义和传输方式
clc
clear all
close all

var1 = randn(3,3);
var2 = randn(3,3);
var3 = randn(3,3);
var4 = randn(3,3);
var5 = randn(3,3);
var6 = randn(3,3);
var7 = randn(3,3);

res = Add(var1,var2,var3,var4,var5,var6,var7)

function res = Add(p1,p2,p3,p4,p5,p6,p7)
    res = p1+p2+p3+p4+p5+p6+p7;
end

如果需要定义更多的变量,则这种方式是繁琐费时费力,容易出错,debug起来也是令人烦躁郁闷。上述程序,主要有四个值得注意和改进的部分:
在这里插入图片描述
所谓量变引起质变,对于一两个变量的不太复杂的函数程序,上述每一个环节平常都不是格外留意的对象,一旦变量批量化(>10个),原本习以为常司空见惯的也变为问题而棘手的了。针对上述四个问题,下面给出相应的改进方案:

  • 批量定义和传输方式
clc
clear all
close all

nums = 20;  % 变量个数
height = 100; % 矩阵尺寸
width = 60;
VarCell = {}; % 存储变量
for i = 1:nums
    eval(['Var',num2str(i),'=','i']);  % 批量定义变量,并赋初值
    VarCell{i} = eval(['Var',num2str(i)]); % 将变量实值保存到cell中
end

res = CalcCell(VarCell);  % varcell包含所有实参变量值,只需传入varcell即可
disp(['sum(1:' num2str(nums) ')=' num2str(res)]);

function res = CalcCell(varargin)  % 利用varargin传入可变数量的参数
    res = 0;
    for i = 1:nargin  % 得到输入参数的个数
        lens = length(varargin{i});
        for j = 1:lens
            res = res + varargin{i}{j}; % 得到varcell中每个变量值
        end
    end
end

在这里插入图片描述
上述自定义CalcCell函数中,仅对变量进行简单的求和运算,如果涉及较复杂的操作运算,不可避免会出现其他意想不到的问题,请大家多多交流讨论,批评指正!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值