3

假设我想计算 Vout,其中 Vout = (Vin/((I*w*R*C)+1)); 其中 "i" 应定义为 sqrt(-1) 。我如何在 Objective-C 中做到这一点?

4

2 回答 2

6

然后,您可以#include <complex.h>使用其中一个_Complex_II宏(注意大写)。包含复数值的变量类型用_Complex属性表示,也可以简单写成complex

double complex c1 = 1.0 + 2.0 * I; // 1+2i
double complex c2 = 2.0 + 3.0 * I; // 2+3i
double complex sum = c1 + c2;
double complex mul = c1 * c2;

然后,您可以使用crealcimag函数来获得复数的实部和虚部。

所以在你的情况下:

double Vin = 20; // in Volts
double w = 60; // frequency of your sinusoidal source (60Hz)
double R = 50; // 50 ohms
double C = 20e-6; // 20 µF
double complex invertZc = I*w*C; // Zc = 1/jwC, invertZc = jwC
double complex Vout = Vin / (1. + R*invertZc); // Vout = Vin * 1.0 / (1+Zr/Zc)

请注意,所有这些都是由GNU C 语言提供的(参见此处),并且不是 Objective-C 本身的特定部分,而是来自 GNU C(Objective-C 是 C 的超集)及其扩展(由Xcode 使用的 GCC 和 LLVM 编译器)

于 2013-11-13T16:14:34.540 回答
0

Objective C 没有任何用于处理复数的内置工具。您必须自己进行计算。创建一个包含实部和虚部的 struct imaginaryNumber 的 typedef。编写将这些结构相加和相乘并返回另一个结果的函数。(要乘以 2 个复数 (a1+b1i)•(a2+b2i),您将这些数字视为多项式并使用 FOIL 方法计算结果。两个虚数项的乘积变为实数,因为 i • i = - 1.

于 2013-11-13T16:15:58.970 回答