1. 程式人生 > 實用技巧 >座標輪換法筆記

座標輪換法筆記

#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; }

待解決問題:

通過全域性變數進行初始點的初始化一直有問題(待解決)