坐标轮换法笔记

#include <stdio.h>
#include <math.h>

//定义函数 f(x)=a*x1*x1 + b*x2*x2 + c*x1*x2 + d*x1 + e*x2 + f
int a, b, c, d, e, f;
double e1[2] = { 1,0 };
double e2[2] = { 0,1 };
double p, q;

void seek_num() {
    double ss = 0.0001;
    double m[2] = {10000,10000};
    double n[2] = { 0,0 };
    double l[2] = { 0,0 };
    double i,j, s;

    while(1)
    {
        //一轮搜索
        printf("每次循环的初始点:[%f,%f]\n",m[0],m[1]);
        i = -(2*a*m[0]+ c*m[1]+ d)/(2*a);
        
        n[0] = m[0] + i;
        n[1] = m[1];
        //二轮搜索
        j = -(2*b*n[1]+c*n[0]+e)/(2*b);
        l[0] = n[0];
        l[1] = n[1]+j;

        printf("一轮坐标轮换后的始终点:[%f,%f—%f,%f]\n", m[0], m[1], l[0], l[1]);
        s = sqrt((pow((l[0] - m[0]), 2) + pow((l[1] - m[1]), 2)));
        if(s <= ss) {
            printf("结果:x=[%f,%f]\n", l[0], l[1]);
            break;
        }
        else
        {
            m[0] = l[0];
            m[1] = l[1];
        }
    }
    return 0;
}

void main() {
    printf("请输入\na= b= c= d= e= f= \n");
    scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
    //scanf("%f%f", &p, &q);
    
    seek_num();
    return 0;
}

 待解决问题:

通过全局变量进行初始点的初始化一直有问题(待解决)

posted @ 2020-12-13 16:10  北冰洋L  阅读(386)  评论(0编辑  收藏  举报