⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erjiedaoshu.cpp

📁 用C++编的多元函数求二阶导数
💻 CPP
字号:
#include "iostream.h"
#include "math.h"
void hessian(double (*pf)(double *x),int n,double *point,double *H);
double fun(double *x);

void main(void)
{
    int n=2;
    double x[2]={1,1};
double H[4];
hessian(fun,n,x,H);
for (int i=0;i<=3;i++)
    cout<<H[i]<<"  ";
    cout<<"\n";
}

void hessian(double (*pf)(double *x),int n,double *point,double *H)
{
    int i,j;
    double h=1e-3;
    double *temp=new double[n];
    for(i=1;i<=n;i++)
        temp[i-1]=point[i-1];
        for(i=1;i<=n;i++)
            {
                temp[i-1]+=h/2;
                H[(i-1)*n+i-1]=16*pf(temp);
                temp[i-1]-=h;
                H[(i-1)*n+i-1]+=16*pf(temp);
                temp[i-1]+=(3*h/2);
                H[(i-1)*n+i-1]-=pf(temp);
                temp[i-1]-=(2*h);
                H[(i-1)*n+i-1]-=pf(temp);
                H[(i-1)*n+i-1]-=(30*pf(point));
                H[(i-1)*n+i-1]/=(3*h*h);
                temp[i-1]=point[i-1];
            }
            for(i=1;i<=n;i++)
                for(j=i+1;j<=n;j++)
                    {
                        temp[i-1]+=h/2;
                        temp[j-1]+=h/2;
                        H[(i-1)*n+j-1]=16*pf(temp);
                        temp[i-1]-=h;
                        temp[j-1]-=h;
                        H[(i-1)*n+j-1]+=16*pf(temp);
                        temp[i-1]+=(3*h/2);
                        temp[j-1]+=(3*h/2);
                        H[(i-1)*n+j-1]-=pf(temp);
                        temp[i-1]-=(2*h);
                        temp[j-1]-=(2*h);
                        H[(i-1)*n+j-1]-=pf(temp);
                        H[(i-1)*n+j-1]-=(30*pf(point));
                        H[(i-1)*n+j-1]/=(3*h*h);
                        H[(i-1)*n+j-1]-=H[(i-1)*n+i-1];
                        H[(i-1)*n+j-1]-=H[(j-1)*n+j-1];
                        H[(i-1)*n+j-1]/=2;
                        temp[i-1]=point[i-1];
                        temp[j-1]=point[j-1];
                    }
                    for(i=1;i<=n;i++)
                        for(j=i+1;j<=n;j++)
                            H[(j-1)*n+i-1]=H[(i-1)*n+j-1];
                            delete[] temp;
                        }
                        
                        double fun(double *x)
                        {
                            return x[0]*exp(x[0]-x[1]*x[1]);
                        }
                        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -