Being in the software development industry has one big downside: there's a big group of clients who simply don't understand the complexity of their requirements. Going for an agile approach if your client doesn't think what you're doing is complex is probably one of the biggest risks you can take.
To minimize the risk you should always consult your client first, ask what they think is reasonable, and most importantly, be able to explain why you need so much time. Be careful with real-world analogies, as those are usually flawed in one or more aspects.
I've found that the first thing you should try to figure out is if your client is open to an agile approach. Brian already pinpointed the problem, the project triangle. The biggest problem I encounter with my projects is usually the client's approach, their mentality if you will.
I think the best solution is what Slartibartfast suggests: Find the minimum requirements, try to find the the minimum and maximum time required and try to establish a fixed price somewhere in the middle. Indicate that you will make sure the system will fulfill the requirements which you put down on paper, and make sure you both agree on them. Tell your client that for complex requirements you want to use an agile approach, which in layman's terms means that you will build small parts and then consult them, with the price simply being in the hours (and materials) you invest (with an appropriate margin for you to make profit of course ;)).
If your client will not agree with that, you could always reject the project. You shouldn't take on every project that's offered to you, especially not the ones that have a big risk of forcing you to either deliver a sub-par product (to your standards) or run out of budget.
It's better to not do a project than to do a project below your standards, as it might hurt your good name.
That being said, I'm still looking for a way to make the business people understand my point of view, so good luck on this one ;-)