精华内容
下载资源
问答
  • Matlab平均曲率计算计算公式代码使用实列end 计算公式 代码 整理为了一个函数. // 输出的是平均曲率曲率序列 function [mean1,k2] = Mean_curvature(x0,y0) h = abs(diff([x0(2), x0(1)])); %一阶导 yapp1 = ...

    Matlab平均曲率计算

    计算公式

    在这里插入图片描述

    代码

    整理为了一个函数.

    // 输出的是平均曲率,曲率序列
    
    function [mean1,k2] = Mean_curvature(x0,y0)
        h = abs(diff([x0(2), x0(1)]));
        %一阶导
        yapp1 = gradient(y0, h);           %matlab数值近似
        %二阶导
        yapp2 = 2 * 2 * del2(y0, h);       %matlab数值近似
        % 模拟曲率
        k2 = abs(yapp2)./(1+yapp1.^2).^(3/2);
        mean1 = mean(k2);
    end
    

    使用实列

    h=0.01;                        %步长
    x=0:h:pi;
    y=sin(x);                      %定义x,y
    [a,b] = Mean_curvature(x,y);
    plot(x,b);
    function [mean1,k2] = Mean_curvature(x0,y0)
        h = abs(diff([x0(2), x0(1)]));
        %一阶导
        yapp1 = gradient(y0, h);           %matlab数值近似
        %二阶导
        yapp2 = 2 * 2 * del2(y0, h);       %matlab数值近似
        % 模拟曲率
        k2 = abs(yapp2)./(1+yapp1.^2).^(3/2);
        mean1 = mean(k2);
    end
    

    在这里插入图片描述

    end

    展开全文
  • matlab绘制曲率

    2015-08-11 10:32:03
    绘制Bezier和B样条关于弧长的曲率图,有点复杂。
  • matlab算法计算三维散乱点云的曲率,包括主曲率,高斯曲率和平均曲率 matlab算法计算三维散乱点云的曲率,包括主曲率,高斯曲率和平均曲率
  • matlab计算表面曲率

    2017-08-23 12:00:13
    Surface Curvature
  • matlab开发-三角网格曲率估计。计算三角形网格每个顶点的曲率曲率导数张量
  • matlab开发-2线性曲率和法线。由二维点组成的直线/轮廓的精确曲率和法线
  • 一.MATLAB求微分方程的解析解MATLAB中求微分方程的解析解的函数如下: 1.这里的引号单双皆可,但必须为英文输入法下的引号。2.在表达微分方程时,用字母D表示,D2,D3表示二阶、三阶微分,后面跟的是要求解的因变量。3...

    一.MATLAB求微分方程的解析解

    MATLAB中求微分方程的解析解的函数如下:

    1.这里的引号单双皆可,但必须为英文输入法下的引号。

    2.在表达微分方程时,用字母D表示,D2,D3表示二阶、三阶微分,后面跟的是要求解的因变量。

    3.自变量可以指定,不写时Matlab会默认为t。

    4.在单引号中的方程的书写必须符合Matlab的语法规范,如‘y-Dy=2*x’,乘号不能省略。

    5.初始值可以不给,不给求出来就是通解。

    6.如果有多个微分方程,那么计算的实际上是微分方程组。

    7.如果微分方程形式较为复杂,往往是得不到解析解的。

    例:

    1.

    fd0b39f558a118073e6609d075281d36.png

    也可以这样写

    syms 

    2.

    如果方程中含有不是应变量与自变量的参数

    %法1
    

    3.

    dsolve

    4.

    dsolve

    5.

    dsolve

    另外可以通过MATLAB的mupad或实时脚本来对运算结果来化简。

    在命令行直接输入mupad即可

    01ce9349fe26aa1d761dc5204fed86a5.png

    新建实时脚本

    daa9156530df0c0c3307ff6224358d5f.png

    化成Latex代码

    latex

    1802d41067be9adc4ca23580db9b2944.png

    二.MATLAB求微分方程的数值解

    Matlab中求微分方程的数值解的函数如下:

    [
    • 代表变量,
      代表函数值,solver代表求解函数,常见的函数有7种,
      代表自变量的初值和终值,也可以指定一个向量。
    • 代表函数的初始值
    • 表示待解的微分方程编写的
      函数文件名,且微分方程要写成
      标准形式,且要放在当前的工作文件下。
    • 可以设置相对误差与绝对误差。

    标准形式:

    这里

    只是变量名,可以自己选择。
    • 若求解的是一个含有
      个未知数的方程组,则
      维向量,
      文件中待解方程组应为一个
      维列向量。

    刚性问题与非刚性问题的区别,有的微分方程,未知函数随时间(自变量)的变化比较缓慢,有的微分方程中未知函数在某些时间段内会发生剧烈的变化。前者是非刚性问题,后者是刚性问题。

    例1:求方程

    的数值解,初始值
    ,
    范围是
    1. 化为标准形式
    2. 建立
      文件df1.m
    function
    1. 在命令行输入命令:

    例2:求微分方程组:

    的数值解。自变量
    ,初始值
    1. 建立
      文件(df2.m)

    注:

    都是一行三列的向量
    function

    在命令行中输入命令:

    展开全文
  • 曲率,主方向,高斯曲率与平均曲率公式与matlab代码先上结论Weingarten变换最后是代码啦 先上结论 Weingarten变换 最后是代码啦 在离散情况下,数据表示为X,Y,Z(X,Y由meshgrid产生,Z是曲面的值)像这样: ...

    主曲率,主方向,高斯曲率与平均曲率公式与matlab代码

    先上结论

    在这里插入图片描述

    Weingarten变换

    在这里插入图片描述
    在这里插入图片描述

    最后是代码啦

    在离散情况下,数据表示为X,Y,Z(X,Y由meshgrid产生,Z是曲面的值)像这样:
    在这里插入图片描述
    那么r=r(u,v)是什么呢?
    当然就是r=[x,y,z]=[x(row,col),y(row,col),z(row,col)]啦,即u,v就是网格1,2,3…
    所以有:
    [Xu,Xv] = gradient(X);
    [Yu,Yv] = gradient(Y);
    [Zu,Zv] = gradient(Z);
    等等这样的代码啦。
    matalb 代码如下:

    function   [K,H,Pmax,Pmin,D1,D2] = surfcurvature(X,Y,Z)
    % K AND H ARE THE GAUSSIAN AND MEAN CURVATURES, RESPECTIVELY.
    % Pmax AND Pmin ARE THE MINIMUM AND MAXIMUM CURVATURES AT EACH POINT, RESPECTIVELY.
    % d1,d2 ARE THE MAIN DIRECTIONS
    
    % First Derivatives
    [Xu,Xv] = gradient(X);
    [Yu,Yv] = gradient(Y);
    [Zu,Zv] = gradient(Z);
    
    % Second Derivatives
    [Xuu,Xuv] = gradient(Xu);
    [Yuu,Yuv] = gradient(Yu);
    [Zuu,Zuv] = gradient(Zu);
    
    [Xuv,Xvv] = gradient(Xv);
    [Yuv,Yvv] = gradient(Yv);
    [Zuv,Zvv] = gradient(Zv);
    
    % Reshape 2D Arrays into Vectors
    Xu = Xu(:);   Yu = Yu(:);   Zu = Zu(:); 
    Xv = Xv(:);   Yv = Yv(:);   Zv = Zv(:); 
    Xuu = Xuu(:); Yuu = Yuu(:); Zuu = Zuu(:); 
    Xuv = Xuv(:); Yuv = Yuv(:); Zuv = Zuv(:); 
    Xvv = Xvv(:); Yvv = Yvv(:); Zvv = Zvv(:); 
    
    Xu          =   [Xu Yu Zu];
    Xv          =   [Xv Yv Zv];
    Xuu         =   [Xuu Yuu Zuu];
    Xuv         =   [Xuv Yuv Zuv];
    Xvv         =   [Xvv Yvv Zvv];
    
    % First fundamental Coeffecients of the surface (E,F,G)
    E           =   dot(Xu,Xu,2);
    F           =   dot(Xu,Xv,2);
    G           =   dot(Xv,Xv,2);
    
    m           =   cross(Xu,Xv,2);
    p           =   sqrt(dot(m,m,2));
    n           =   m./[p p p]; 
    
    [s,t] = size(Z);
    
    % [nu,nv] = gradient(reshape(n,s,t,3));
    % Nu = reshape(nu,[],3);
    % Nv = reshape(nv,[],3);
    
    % Second fundamental Coeffecients of the surface (L,M,N)
    L           =   dot(Xuu,n,2);
    M           =   dot(Xuv,n,2);
    N           =   dot(Xvv,n,2);
    
    % Gaussian Curvature
    K = (L.*N - M.^2)./(E.*G - F.^2);
    K = reshape(K,s,t);
    
    % Mean Curvature
    H = (E.*N + G.*L - 2.*F.*M)./(2*(E.*G - F.^2));
    H = reshape(H,s,t);
    
    % Principal Curvatures
    Pmax = H + sqrt(H.^2 - K);
    Pmin = H - sqrt(H.^2 - K);
    
    % a = (L.*G - M.*F)./(E.*G -F.*F);
    % b = (M.*E - L.*F)./(E.*G -F.*F);
    % c = (M.*G - N.*F)./(E.*G -F.*F);
    % d = (N.*E - M.*F)./(E.*G -F.*F);
    % W = permute(reshape([a b c d]',2,2,[]),[2,1,3]);
    
    %MAIN DIRECTIONS
    D1=(Pmax(:).*G-N).*Xu+(M-Pmax(:).*F).*Xv;
    D2=(Pmin(:).*G-N).*Xu+(M-Pmin(:).*F).*Xv;
    nd1 = sqrt(dot(D1,D1,2));
    nd2 = sqrt(dot(D2,D2,2));
    D1=D1./[nd1 nd1 nd1];
    D2=D2./[nd2 nd2 nd2];
    
    D1=reshape(D1,s,t,3);%k1's MAIN DIRECTION
    D2=reshape(D2,s,t,3);
    
    % %RETURN
    % curvature.k = K;
    % curvature.h = H;
    % curvature.pmax = Pmax;
    % curvature.pmin = Pmin;
    % curvature.d1 = D1;
    % curvature.d2 = D2;
    
    
    
    

    有人问调用方法,我举个例子:
    假设有曲面z = x^2 + y^2
    在此之前补充另一个方法
    对于曲面S = S(x,y),平均曲率H也可以通过下式计算:
    在这里插入图片描述
    其中n是S的单位法向量。

    % 例子
    % 产生函数
    clear
    close all
    clc
    f=@(x,y)x.^2+ y.^2;
    [x ,y]=meshgrid(linspace(-1,1,100),linspace(-1,1,100));
    z=f(x,y);
    
    % 解析方法
    syms X Y
    Nf=gradient(f(X,Y));
    Nfx=Nf(1);
    Nfy=Nf(2);
    H=simplify((diff(Nfx./(1+Nfx.^2+Nfy.^2).^0.5,'X')+diff(Nfy./(1+Nfx.^2+Nfy.^2).^0.5,'Y'))/2);
    H=matlabFunction(H);
    h=H(x,y);
    
    % 数值方法1
    [k,h1,P1,P2,D1,D2] = surfcurvature(x,y,z); %就这么调用
    
    surf(x,y,z,h,'LineStyle','none','FaceAlpha',1);
    hold on
    quiver3(x,y,z,D1(:,:,1),D1(:,:,2),D1(:,:,3),0.2,'r');%极大方向
    quiver3(x,y,z,D2(:,:,1),D2(:,:,2),D2(:,:,3),0.2,'k');%极小方向
    axis equal
    
    % 数值方法2
    [NX,NY,NZ]=surfnorm(x,y,z);
    % quiver3(x,y,z,NX,NY,NZ);%可视化,用于验证是否是法向量
    div=divergence(x,y,-NX,-NY)/2;%注意 此处的-号
    h2 = div;
    
    %计算误差
    fprintf("h - h1 error : %f\n",sum(sum((h-h1).^2)))
    fprintf("h - h2 error : %f\n",sum(sum((h-h2).^2)))
    %通过有边界误差,去除边界重新计算
    mask = true(size(h)); 
    mask(1:2,:) = 0; mask(end-1:end,:) = 0;
    mask(:,1:2) = 0; mask(:,end-1:end) = 0; 
    hh = reshape(h(mask),size(h,1)-4,size(h,2)-4);
    h11 =  reshape(h1(mask),size(h,1)-4,size(h,2)-4);
    h22 =  reshape(h2(mask),size(h,1)-4,size(h,2)-4);
    fprintf("hh - h11 error : %f\n",sum(sum((hh-h11).^2)))
    fprintf("hh - h22 error : %f\n",sum(sum((hh-h22).^2)))
    %这说明尽管方法1边界误差大,但去除边界后表现好于方法2
    

    在这里插入图片描述

    [1]: <<微分几何>> 彭家贵
    [2]: 平均曲率
    https://baike.baidu.com/item/%E5%B9%B3%E5%9D%87%E6%9B%B2%E7%8E%87

    展开全文
  • Matlab实现的测量目标曲率的小程序
  • matlab开发-GaussianandMean曲率刻度计算自然三角3曲面。该代码计算了三角形三维曲面上的高斯曲率和平均曲率
  • matlab开发-find3dnormals和曲率。稀疏点云的快速法向和曲率估计
  • MATLAB曲率最大处并在图中显示

    千次阅读 2018-07-18 16:06:55
    %matlab数值近似 yapp2 = del2(y0)./ht; %matlab数值近似 k2 = abs(yapp2)./(1+yapp1.^2).^(3/2); plot(k2) title('曲率曲线') [~,maxFlag] = max(k2); %曲率最大位置 x_max = x0(maxFlag); y_max = y0...
    x0=Pp(1,:);                              %Pp第一行为横坐标
    y0=Pp(2,:);                              %Pp第一行为横坐标
    h1 = abs(diff(x0)) ;
        h = [h1 h1(end)];
        ht = h;
        yapp1 = gradient(y0)./ht;            %matlab数值近似
        yapp2 = del2(y0)./ht;                %matlab数值近似
        k2 = abs(yapp2)./(1+yapp1.^2).^(3/2);
        plot(k2)
        title('曲率曲线')
        [~,maxFlag] = max(k2);               %曲率最大位置
        x_max = x0(maxFlag);
        y_max = y0(maxFlag);
        %画出图像 标注曲率最大点
        figure
        plot(x0,y0,'.-');
        hold on;
        plot(x_max,y_max,'rp')
        title('标注最大曲率点')
        xlabel('log10((norm(B*Xk-L)))')
        ylabel('log10((norm(Xk)))')
    

     

    展开全文
  • matlab开发-基于曲率的三维扭转法基础。在给定扭转和曲率函数的情况下,通过求解弗兰特微分方程组来计算曲线。
  • matlab开发-三角曲面3的曲率计算。在三维三角形网格上计算主曲率
  • 利用曲率尺度空间(CSS)算法检测角点,matlab实现,含GUI界面
  • matlab开发-快速各向异性曲率保持平滑。高质量图像去噪的快速各向异性保曲率平滑
  • 前言: 《托马斯微积分》真是一本神奇的书,一次次刷新我的三观。... 直到学习到曲率和挠率的章节,有了前边的积累,书本列出的,曲率和挠率计算公式自认为都能看懂,例题给出的例子,套用公式也都能算出来。...
  • 主成分分析经常被用做模型分类时特征的降维,本篇首先介绍PCA的步骤,并根据步骤撰写对应的MATLAB代码,最后指明使用PCA的步骤。我们在做分类时,希望提取的特征能够最大化将数据分开,如果数据很紧密,模型就比较难...
  • MATLAB 插值+计算离散点曲率

    千次阅读 2020-07-10 21:03:58
    最后通过公式求得曲率 公式: 例:余弦函数取 8 个点,用 B-Spline 插值 x = 0:1:7; y = cos(x*0.5*pi); xx=0:0.01:7; yy=spline(x,y,xx); h1 = abs(diff(xx)); h = [h1 h1(end)]; ht = h; yy1=gradient(yy)...
  • 1-1 基于matlab的平面曲线曲率的数值计算 工具 向量函数:设曲线r(s)=(x(s),y(s))r(s)=(x(s),y(s))r(s)=(x(s),y(s))是一条正则曲线,其中sss是弧长参数。,r(s)r(s)r(s)是以向量形式表示的,所以称为向量函数。 ...
  • 使用matlab编程简支梁钢筋混凝土梁的弯矩-曲率曲线
  • matlabB样条曲线求导求曲率

    千次阅读 2019-05-07 10:58:35
    原文:...function result = BspCurv( C,U,t,k) % %CURVATURE B样条曲线在t点曲率 %C控制点,U节点序列,U(k)<=t<U(k+1) % %see also http://www.matlabsky.com % dev1=0; dev2=0; %%计算...
  • Matlab的离散点曲线导数曲率数值模拟方法 曲率公式 模拟方法 复制内容到剪贴板 代码: clc; clear all; close all; x0 = linspace(0, 1; y0 = sin(x0*cos(x0; h = abs(diff([x0(2, x0(1)]; % 模拟一阶导 figure; box ...
  • 为了找出向量 U 在文件 pca.m 中的代码为: % ====================== YOUR CODE HERE ====================== matlab 中函数 svd 是奇异值分解函数,如果需要查看其详情的文档,可以在matlab中输入 : help svd 命令...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 169
精华内容 67
关键字:

matlab曲率

matlab 订阅