일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 내적 공간#적분
- 최소자승#least-square#목적함수#양한정#정점조건#최소조건
- 푸리에 급수
- 비제차#제차해#일반해#적분인자#적분인자법#homogeneous sol#nonhomogeneous sol#integrating factor
- 부분 분수분해
- 미분방정식 #선형 미분방정식 #상미분 방정식
- 가중 최소제곱법
- 선형변환#contraction#expansions#shears#projections#reflection
- 내적#duality#쌍대성#dot product
- 오일러-코시 미방#계수내림법
- 계수내림법#reduction of order#wronskian#론스키안#아벨항등식#abel's identity
- 그람-슈미트 과정#gram-schmidt process
- 2계미방#모드#mod#특성방정식#characteristic eq#제차해
- 상태천이행렬#적분인자법#미정계수법#케일리-헤밀톤 정리
- 여인자
- 선형 상수계수 미분방정식#lccode#sinusoidal input
- 멱급수법
- 추정문제#normal equation#직교방정식#정사영#정사영행렬#정사영 변환
- dirichlet
- weighted least-squares
- 여인수 행렬
- 푸리에 정리
- 정규직교행렬
- 선형독립#기저벡터#선형확장#span#basis
- 변수분리#동차 미분방정식#완전 미분방정식
- reflection matrix
- 직교행렬#정규직교행렬#orthonormal#reflection matrix#dcm
- 선형시스템연산자#라이프니츠 법칙#fundamental theorem of algebra#erf
- 베르누이 미분방정식
- linespectra#feurierseries#푸리에 급수
Archives
OnlyOne
Practice[Root Formula] 본문
Practice[Root Formula]
Intro
This program computes the root formula.
Header File
/*====================================================================================
Handong Global University
--------------------------------------------------------------------------------------
Name: Taesan Kim
ID: 22300203
Create: 2024.07.17
Modifire: 2024.07.17
--------------------------------------------------------------------------------------
복소수(Complex Number)와 관련된 연산 및 출력 지원
====================================================================================*/
#ifndef MYCOMPLEX_H
#define MYCOMPLEX_H
#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
typedef struct//_complex 이거 원래 써야하는데, math.h쓰면 오류뜨니까 지워.
{
double real;
double imag;
} Complex;
/**
* @breif 복소수 덧셈
* 복소수 num1과 num2를 더한다
* @param num1: 복소수1
* @param num2: 복소수2
*
* @return: 복소수1과 복소수2를 더한 값
*/
Complex add_com(Complex num1, Complex num2);
Complex sub_com(Complex num1, Complex num2);
Complex mul_com(Complex num1, Complex num2);
Complex div_com(Complex num1, Complex num2);
void print_com(Complex result);
typedef enum _Phase
{
RAD = 0,
ANGLE
} Phase;
/**
* @brief 복소수의 위상과 크기
* 복소수 result를 통해 위상을 구한다.
* @param result: 복소수
*
* @return: 복소수의 위상값
*/
double rad(Complex result);
double ang(Complex result);
/**
* @brief 입력값의 복소수 변환
* 입력값을 받아 오일러 변환을 한다.
* @param result: 입력 복소수
*
* @return: 오일러 변환값
*/
typedef struct
{
double radious;
double radian;
} Exp;
Exp euler_func(Complex result);
Exp euler_sqrt(Exp euler_result);
Exp euler_mul(Exp euler_result, int exponent);
/**
* @breif 근의공식을 지원한다.
* 3개의 계수를 배열로 받아 근의공식을 적용한 뒤, 복소수 배열을 출력
* @param coef: 입력 계수
*
* @result: 복소수 배열
*/
void quadratic_formula(double coef[3], Complex quadratic_result[2]);
#endif //MYCOMPLEX_H
Source File
#include "../include/myComplex.h"
Complex add_com(Complex num1, Complex num2)
{
Complex result;
result.real = num1.real + num2.real;
result.imag = num1.imag + num2.imag;
return result;
}
Complex sub_com(Complex num1, Complex num2)
{
Complex result;
result.real = num1.real - num2.real;
result.imag = num1.imag - num2.imag;
return result;
}
Complex mul_com(Complex num1, Complex num2)
{
Complex result;
result.real = num1.real * num2.real - num1.imag * num2.imag;
result.imag = num1.real * num2.imag + num1.imag * num2.real;
return result;
}
Complex div_com(Complex num1, Complex num2)
{
Complex result;
result.real = (num1.real * num2.real + num1.imag * num2.imag)/(num2.real * num2.real + num2.imag * num2.imag);
result.imag = (num1.imag * num2.real - num1.real * num2.imag)/(num2.real * num2.real + num2.imag * num2.imag);
return result;
}
void print_com(Complex result)
{
if (result.imag == 0.0)
{
printf("%f", result.real);
}
else if (result.imag != 0.0)
{
printf("%f + %fj\n", result.real, result.imag);
}
}
double rad(Complex result)
{
Phase Rad;
double radian;
double angle;
radian = atan(result.imag / result.real);
Rad = RAD;
return radian;
}
double ang(Complex result)
{
Phase Angle;
double angle;
angle = atan(result.imag / result.real) * 180 / M_PI;
Angle = ANGLE;
return angle;
}
Exp euler_func(Complex result)
{
Exp euler_result;
euler_result.radious = sqrt(result.real * result.real + result.imag * result.imag);
euler_result.radian = atan(result.imag / result.real)/2;
return euler_result;
}
Exp euler_sqrt(Exp euler_result)
{
Exp sqrt_result;
sqrt_result.radious = sqrt(euler_result.radious);
sqrt_result.radian = euler_result.radian / 2;
return sqrt_result;
}
Exp euler_mul(Exp euler_result, int exponent)
{
Exp mul_result;
mul_result.radious = pow(euler_result.radious, exponent);
mul_result.radian = euler_result.radian * exponent;
return mul_result;
}
void quadratic_formula(double coef[3], Complex quadratic_result[2])
{
double a = coef[0];
double b = coef[1];
double c = coef[2];
double discriminent = b * b - 4.0 * a * c;
if (discriminent < 0.0)
{
quadratic_result[0].real = -b / (2.0 * a);
quadratic_result[1].real = -b / (2.0 * a);
quadratic_result[0].imag = sqrt(discriminent) / (2.0 * a);
quadratic_result[1].imag = -sqrt(discriminent) / (2.0 * a);
}
else if (discriminent >= 0.0)
{
quadratic_result[0].real = (-b + sqrt(discriminent)) / (2.0 * a);
quadratic_result[1].real = (-b - sqrt(discriminent)) / (2.0 * a);
quadratic_result[0].imag = 0.0;
quadratic_result[1].imag = 0.0;
}
}
Main
#include "include/myComplex.h"
int main()
{
Complex num1 = { 16.0, 24.0};
Complex num2 = { 28.0, 31.0};
Complex result = add_com(num1, num2);
print_com(result);
float num;
printf("RADIAN:0, ANGLE:1 : ");
scanf_s("%f", &num);
if (num == 0.0) {
printf("Print type is RADIAN!!!\n");
printf("Value is %f\n", rad(result));
}
if (num == 1.0) {
printf("Print type is ANGLE!!\n");
printf("Value is %f\n", ang(result));
}
//오일러 변환값
printf("Euler angle: %f*exp(%f)\n\n", euler_func(result).radious, euler_func(result).radian);
Exp euler_result = euler_func(result);
//제곱근을 씌운다.
printf("Root of Euler angle: %f*exp(%f)\n\n", euler_sqrt(euler_result).radious, euler_sqrt(euler_result).radian);
//거듭제곱값 받는다.
int exponent;
printf("Write how much want to exponent : ");
scanf_s("%d", &exponent);
printf("\n\n");
//거듭제곱해서 준다.
printf("Power of Euler angle: %f*exp(%f)\n\n", euler_mul(euler_result, exponent).radious, euler_mul(euler_result, exponent).radian);
//근의 공식을 적용할 3개의 계수를 받는다.
double coef[3] = { 1.0, 4.0, 4.0 };
//근의 공식을 구한다.
Complex quadratic_result[2];
quadratic_formula(coef, quadratic_result);
printf("첫번째 근은 : \n\n");
print_com(quadratic_result[0]);
printf("\n======================\n");
printf("두번째 근은 : \n\n");
print_com(quadratic_result[1]);
printf("\n======================\n");
return 0;
}
'Control Engineering > C Programming' 카테고리의 다른 글
Practice[MAF] (1) | 2024.09.04 |
---|---|
Practice[Integral] (0) | 2024.09.04 |
구조체(Derived Type) (0) | 2024.09.04 |
Operator(비트연산자와 삼항연산자) (0) | 2024.08.10 |
오버플로우(Overflow)와 언더플로우(Underflow) (0) | 2024.08.10 |