当前位置:首页 > 代码 > 正文

svm算法matlab代码(matlab svm函数)

admin 发布:2022-12-19 20:05 140


本篇文章给大家谈谈svm算法matlab代码,以及matlab svm函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

SVM混合核函数matlab代码求助

SVM在matlab中实现:

首先需要MATLAB SVM Toolbox,将其中的文件解压并命名为svm。

将文件拷到E:\matlab\toolbox。

打开matlab点击set path----add folder ,然后把工具箱文件夹添加进去就可以了。

路径加进去后在file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下。

最后在matlab的命令栏中输入which svcoutput可以查看路径E:\matlab\toolbox\svm\svcoutput.m就可以了。

求一用MATLAB 语言编写的SVM回归程序,谢谢

拉格朗日

function y=lagrange(x0,y0,x)

n=length(x0);m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

end

SOR迭代法的Matlab程序

function [x]=SOR_iterative(A,b)

% 用SOR迭代求解线性方程组,矩阵A是方阵

x0=zeros(1,length(b)); % 赋初值

tol=10^(-2); % 给定误差界

N=1000; % 给定最大迭代次数

[n,n]=size(A); % 确定矩阵A的阶

w=1; % 给定松弛因子

k=1;

% 迭代过程

while k=N

x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);

for i=2:n

x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);

end

if max(abs(x-x0))=tol

fid = fopen('SOR_iter_result.txt', 'wt');

fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');

fprintf(fid,'迭代次数: %d次\n\n',k);

fprintf(fid,'x的值\n\n');

fprintf(fid, '%12.8f \n', x);

break;

end

k=k+1;

x0=x;

end

if k==N+1

fid = fopen('SOR_iter_result.txt', 'wt');

fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');

fprintf(fid,'迭代次数: %d次\n\n',k);

fprintf(fid,'超过最大迭代次数,求解失败!');

fclose(fid);

end

Matlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法。如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法。一阶常微分方程可以写作:y'=f(x,y),使用差分概念。

(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等于,极限为Yn')

Yn+1=Yn+h*f(Xn,Yn)

另外根据微分中值定理,存在0t1,使得

Yn+1=Yn+h*f(Xn+th,Y(Xn+th))

这里K=f(Xn+th,Y(Xn+th))称为平均斜率,龙格库塔方法就是求得K的一种算法。

利用这样的原理,经过复杂的数学推导(过于繁琐省略),可以得出截断误差为O(h^5)的四阶龙格库塔公式:

K1=f(Xn,Yn);

K2=f(Xn+h/2,Yn+(h/2)*K1);

K3=f(Xn+h/2,Yn+(h/2)*K2);

K4=f(Xn+h,Yn+h*K3);

Yn+1=Yn+h*(K1+2K2+2K3+K4)*(1/6);

所以,为了更好更准确地把握时间关系,应自己在理解龙格库塔原理的基础上,编写定步长的龙格库塔函数,经过学习其原理,已经完成了一维的龙格库塔函数。

仔细思考之后,发现其实如果是需要解多个微分方程组,可以想象成多个微分方程并行进行求解,时间,步长都是共同的,首先把预定的初始值给每个微分方程的第一步,然后每走一步,对多个微分方程共同求解。想通之后发现,整个过程其实很直观,只是不停的逼近计算罢了。编写的定步长的龙格库塔计算函数:

function [x,y]=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)

n=floor((b-a)/h);%求步数

x(1)=a;%时间起点

y(:,1)=y0;%赋初值,可以是向量,但是要注意维数

for ii=1:n

x(ii+1)=x(ii)+h;

k1=ufunc(x(ii),y(:,ii));

k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);

k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);

k4=ufunc(x(ii)+h,y(:,ii)+h*k3);

y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;

%按照龙格库塔方法进行数值求解

end

调用的子函数以及其调用语句:

function dy=test_fun(x,y)

dy = zeros(3,1);%初始化列向量

dy(1) = y(2) * y(3);

dy(2) = -y(1) + y(3);

dy(3) = -0.51 * y(1) * y(2);

对该微分方程组用ode45和自编的龙格库塔函数进行比较,调用如下:

[T,F] = ode45(@test_fun,[0 15],[1 1 3]);

subplot(121)

plot(T,F)%Matlab自带的ode45函数效果

title('ode45函数效果')

[T1,F1]=runge_kutta1(@test_fun,[1 1 3],0.25,0,15);%测试时改变test_fun的函数维数,别忘记改变初始值的维数

subplot(122)

plot(T1,F1)%自编的龙格库塔函数效果

title('自编的 龙格库塔函数')

MATLAB如何做非线性SVM?自带function吗?

matlab是有自己自带的svm函数的,不过做得不是很强,你可以另外下载网上其他人开发的svm函数工具箱,放到matlab自己的的tool文件夹里面,在命令窗口打

addpath(genpath(D:\MATLAB6p5\toolbox\svm));

前面的路径是你的matlab的路径

matlab自带的svm函数是svmtrain

svmtrain Train a support vector machine classifier

SVMSTRUCT = svmtrain(TRAINING, Y) trains a support vector machine (SVM)

classifier on data taken from two groups. TRAINING is a numeric matrix

of predictor data. Rows of TRAINING correspond to observations; columns

correspond to features. Y is a column vector that contains the known

class labels for TRAINING. Y is a grouping variable, i.e., it can be a

categorical, numeric, or logical vector; a cell vector of strings; or a

character matrix with each row representing a class label (see help for

groupingvariable). Each element of Y specifies the group the

corresponding row of TRAINING belongs to. TRAINING and Y must have the

same number of rows. SVMSTRUCT contains information about the trained

classifier, including the support vectors, that is used by SVMCLASSIFY

for classification. svmtrain treats NaNs, empty strings or 'undefined'

values as missing values and ignores the corresponding rows in

TRAINING and Y.

SVMSTRUCT = svmtrain(TRAINING, Y, 'PARAM1',val1, 'PARAM2',val2, ...)

关于svm算法matlab代码和matlab svm函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/22059.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载